溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP導出數(shù)據(jù)超時如何優(yōu)化

發(fā)布時間:2022-03-25 10:36:16 來源:億速云 閱讀:160 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“PHP導出數(shù)據(jù)超時如何優(yōu)化”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

一般情況下,導出超時可能都是以下三種情況:
  一、sql語句復雜,查詢時間過長;
  二、處理查詢后數(shù)據(jù)邏輯冗余;
  三、數(shù)據(jù)量過大導致響應超時。
接下來分別給出這三種情況的優(yōu)化建議。

一、sql語句復雜,查詢時間過長

  1、查看索引是否設置妥當,即所用的查詢條件是否有添加索引,當然索引不是越多越好,只需給常用的查詢條件加上即可,一般采用B+樹的索引方式(具體原因可自行百度,不再贅述)
  2、在查詢語句中盡量避免IN、NOT IN、IS NULL、OR、!=、<>、LIKE、OR、NOT EXISTS這些查詢條件的出現(xiàn),會導致索引失效。
- IN查詢時,可以考慮用BETWEEN來代替
- LIKE查詢時,僅當"%"在前時會索引失效,"%"在后是不會失效的
- 查詢條件里還要避免數(shù)字的出現(xiàn),使用字符串,數(shù)字也會導致索引失效,例如,查詢:"pid"=1,可以優(yōu)化為"pid"="1"
- 要盡量避免在循環(huán)中使用查詢語句,這種情況一般可以用join或者with來解決(當涉及到跨庫時,請謹慎使用這種方式?。?br/>- 查詢時,可以指定需要查詢的字段,排除掉不需要的字段避免資源浪費
- 當數(shù)據(jù)量多大時,可以使用分頁和緩存來優(yōu)化(具體方法請參考數(shù)據(jù)量過大導致響應超時部分)
溫馨提示:在執(zhí)行查詢語句后,可以通過show profiles來查詢語句的資源消耗情況來幫助你更好的優(yōu)化sql語句;關(guān)于查詢語句是否使用了索引,可以在查詢語句前加explain來查看索引使用情況,例如:
explain select * from user where id= "1";

二、處理查詢后數(shù)據(jù)邏輯冗余

- 在做數(shù)組循環(huán)時,盡量使用continue、break來減少沒必要的循環(huán);

- 盡量減少if嵌套層數(shù),在需要用到多個if-else時,使用switch可以提高效率,特別是在數(shù)據(jù)量大時
- 當進行數(shù)組賦值時,
  一次賦一個值,使用$arr[]=1,會比array_push($arr,"1"),更快,
  但是當需要多次賦值時,
    array_push($arr,"1","2","3",...),會比
    $arr[]="1";
    $arr[]="2"
    $arr[]="3"
    ...
  更快
  
- 遍歷數(shù)組進行賦值時,盡量使用引用的方式,減少內(nèi)存開銷,例如:
  
    foreach($arr as &$item){
      $item = 1;
      ...
    }

三、數(shù)據(jù)量過大導致響應超時

當數(shù)量兩過大,又不想用異步的方式導出excel文件時,可以嘗試使用csv來作為到處格式,且查詢導出數(shù)據(jù)時可以使用分頁的方式查詢,導出時利用ob_flush進行緩存。例如:

$page = 1;    // 頁面
$pageSize = 1000;    //每頁條數(shù)
while(
  $list = Db::name("user")->page($page)->limit($pageSize)->select()
)
{
  foreach($list as &$item){
    // TODO 進行相應的邏輯處理
  }
  $page++;
}

當數(shù)據(jù)訪問次數(shù)過多時,建議使用redis緩存一些固定數(shù)據(jù),減少mysql查詢次數(shù)。
當然,最好的方式還是使用異步的方式導出,建議使用python或者go語言搭建微服務來進行導出。

“PHP導出數(shù)據(jù)超時如何優(yōu)化”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI