有考網(wǎng)有考網(wǎng)合作機(jī)構(gòu)>西安培訓(xùn)學(xué)校>西安新城區(qū)英泰移動(dòng)通信培訓(xùn)
西安新城區(qū)英泰移動(dòng)通信培訓(xùn)
全國(guó)統(tǒng)一學(xué)習(xí)專(zhuān)線 8:30-21:00
位置:有考網(wǎng) > 計(jì)算機(jī)類(lèi) > php開(kāi)發(fā) > PHP導(dǎo)出數(shù)據(jù)為什么有時(shí)會(huì)超時(shí)?  正文

PHP導(dǎo)出數(shù)據(jù)為什么有時(shí)會(huì)超時(shí)?

發(fā)布時(shí)間:2021-09-01 14:48:54來(lái)源:轉(zhuǎn)載

PHP 能做很多事情。PHP 主要是用于服務(wù)端的腳本程序,因此可以用 PHP 來(lái)完成任何其它的 CGI 程序能夠完成的工作,例如收集表單數(shù)據(jù),生成動(dòng)態(tài)網(wǎng)頁(yè),或者發(fā)送/接收 Cookies。那么,PHP導(dǎo)出數(shù)據(jù)為什么有時(shí)會(huì)超時(shí)?

一般情況下,導(dǎo)出超時(shí)可能都是以下三種情況

一、sql語(yǔ)句復(fù)雜,查詢(xún)時(shí)間過(guò)長(zhǎng);

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

三、數(shù)據(jù)量過(guò)大導(dǎo)致響應(yīng)超時(shí)。

優(yōu)化建議

一、sql語(yǔ)句復(fù)雜,查詢(xún)時(shí)間過(guò)長(zhǎng)

1、查看索引是否設(shè)置妥當(dāng),即所用的查詢(xún)條件是否有添加索引,當(dāng)然索引不是越多越好,只需給常用的查詢(xún)條件加上即可,一般采用B+樹(shù)的索引方式(具體原因可自行百度,不再贅述)

2、在查詢(xún)語(yǔ)句中盡量避免IN、NOT IN、IS NULL、OR、!=、<>、LIKE、OR、NOT EXISTS這些查詢(xún)條件的出現(xiàn),會(huì)導(dǎo)致索引失效。

IN查詢(xún)時(shí),可以考慮用BETWEEN來(lái)代替

LIKE查詢(xún)時(shí),僅當(dāng)"%"在前時(shí)會(huì)索引失效,"%"在后是不會(huì)失效的

查詢(xún)條件里還要避免數(shù)字的出現(xiàn),使用字符串,數(shù)字也會(huì)導(dǎo)致索引失效,例如,查詢(xún):"pid"=1,可以?xún)?yōu)化為"pid"="1"

要盡量避免在循環(huán)中使用查詢(xún)語(yǔ)句,這種情況一般可以用join或者with來(lái)解決(當(dāng)涉及到跨庫(kù)時(shí),請(qǐng)謹(jǐn)慎使用這種方式!)

查詢(xún)時(shí),可以指定需要查詢(xún)的字段,排除掉不需要的字段避免資源浪費(fèi)

當(dāng)數(shù)據(jù)量多大時(shí),可以使用分頁(yè)和緩存來(lái)優(yōu)化(具體方法請(qǐng)參考數(shù)據(jù)量過(guò)大導(dǎo)致響應(yīng)超時(shí)部分)

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

在做數(shù)組循環(huán)時(shí),盡量使用continue、break來(lái)減少?zèng)]必要的循環(huán);

盡量減少if嵌套層數(shù),在需要用到多個(gè)if-else時(shí),使用switch可以提率,特別是在數(shù)據(jù)量大時(shí)

三、數(shù)據(jù)量過(guò)大導(dǎo)致響應(yīng)超時(shí)

當(dāng)數(shù)量?jī)蛇^(guò)大,又不想用異步的方式導(dǎo)出excel文件時(shí),可以嘗試使用csv來(lái)作為到處格式,且查詢(xún)導(dǎo)出數(shù)據(jù)時(shí)可以使用分頁(yè)的方式查詢(xún),導(dǎo)出時(shí)利用ob_flush進(jìn)行緩存。

當(dāng)數(shù)據(jù)訪問(wèn)次數(shù)過(guò)多時(shí),建議使用redis緩存一些固定數(shù)據(jù),減少mysql查詢(xún)次數(shù)。

相關(guān)內(nèi)容: php開(kāi)發(fā) PHP導(dǎo)出數(shù)據(jù)超時(shí) PHP

同類(lèi)文章
相關(guān)熱詞