欧美成人片一区二区三区,久久碰人妻一区二区三区,久久婷婷激情综合色综合俺也去,狂野欧美性猛交免费视频,久久夜色精品国产亚洲

03
2017/01

SQL語(yǔ)句主外鍵查詢時(shí),附表數(shù)據(jù)過(guò)多如何處理?

發(fā)布時(shí)間:2017-01-03 09:05:37
發(fā)布者:xiangpeiyu
瀏覽量:
0

之前用PHPCMS進(jìn)行二次開(kāi)發(fā)的時(shí)候遇到過(guò)一個(gè)這樣的問(wèn)題,這個(gè)項(xiàng)目是我們文匯軟件給客戶做的一個(gè)客戶考核系統(tǒng),主表(表A)查詢時(shí)需要關(guān)聯(lián)其他表(表B)的查詢結(jié)果作為查詢條件,而(表B)中含有幾千條的數(shù)據(jù),當(dāng)時(shí)就造成了sql執(zhí)行很慢引起了程序超出最大執(zhí)行時(shí)間,起初,檢查sql語(yǔ)句時(shí)并沒(méi)有發(fā)現(xiàn)什么錯(cuò)誤,采用的就是基本的SQL查詢,最終實(shí)現(xiàn)的效果如下。

QQ圖片20170103095912.png

“select  *  from  表A  where  id  in (select  id  from  表B  where 條件)”,如果表B只是幾十條或者幾百條時(shí)運(yùn)行還是蠻快的,如果表B含有幾千條(當(dāng)時(shí)表中含有五千多條數(shù)據(jù)),運(yùn)行的速度就很慢了,而且表A中也含有幾百條數(shù)據(jù),造成了php運(yùn)行起來(lái)非???,查詢結(jié)果完畢時(shí)耗時(shí)90多秒,所以在php中只能將這條sql語(yǔ)句分成兩部分去分開(kāi)執(zhí)行,先將表B的數(shù)據(jù)查出來(lái)存放到數(shù)組中,再通過(guò)explode函數(shù)將數(shù)組按照“,”逗號(hào)作為連接符去拼接字符串,這樣再?gòu)男陆M成sql語(yǔ)句,“select  *  from   表A  where  id  in (數(shù)組拼接的id字符串)”,這樣查詢速度耗時(shí)不到兩秒,執(zhí)行php腳步也分成流暢,至于為什么上面的那種sql語(yǔ)句在執(zhí)行數(shù)據(jù)量很大時(shí)非??ǎ@是因?yàn)閟ql的運(yùn)行機(jī)制引起的,“select  *  from  表A  where  id  in (select  id  from  表B  where 條件)”先將表B中的幾千條符合條件的數(shù)據(jù)查出依次和表A中每一條數(shù)據(jù)去做對(duì)比執(zhí)行查詢,而并不是說(shuō)查詢出表B然后直接和表A的條件去拼接執(zhí)行,所以當(dāng)sql無(wú)法優(yōu)化的時(shí)候,只能通過(guò)php來(lái)進(jìn)行控制了。

QQ圖片20170103100435.png


關(guān)鍵詞:
返回列表