MySQL SQL語(yǔ)句過(guò)長(zhǎng)引起的問(wèn)題 |
| 發(fā)布時(shí)間: 2012/9/4 17:12:35 |
|
我現(xiàn)在做數(shù)據(jù)統(tǒng)計(jì),后臺(tái)數(shù)據(jù)庫(kù)用的是MYSQL。有一個(gè)常用的需求,查詢(xún)未訂購(gòu)用戶(hù)的訪問(wèn)PV(用戶(hù)唯一性標(biāo)識(shí)是用戶(hù)手機(jī)號(hào)); 第一種寫(xiě)法: SELECT COUNT(1) FROM day_resinlog_2012_06_12 WHERE mobile_number NOT IN (SELECT DISTINCT mobile_number FROM tbl_cartoon_order);-
2.1 通過(guò) SELECT DISTINCT mobile_number FROM tbl_cartoon_order 獲得一個(gè)List<String> 結(jié)合,將獲得的手機(jī)號(hào)的集合拼接成一個(gè)字符串當(dāng)SELECT COUNT(1) FROM day_resinlog_2012_06_12 WHERE mobile_number NOT IN (xxxxx)中的xxxxx; 評(píng)論:第一種寫(xiě)法使用了子查詢(xún),這樣速度比較慢,一般是我們不用它的原因,也是我們選擇第二種寫(xiě)法的原因; 第二種寫(xiě)法表面上沒(méi)有什么問(wèn)題,其實(shí)也有一個(gè)潛在的風(fēng)險(xiǎn),假如我們的訂購(gòu)手機(jī)號(hào)有幾百萬(wàn),就可能會(huì)引起服務(wù)器報(bào)錯(cuò)。因?yàn)橐粭lSQL如果很長(zhǎng),超過(guò)了MYSQL服務(wù)器配置文件(windows下的my.ini)中的max_allowed_packet的量,就會(huì)報(bào)錯(cuò)。解決辦法是改變max_allowed_packet的量。 有沒(méi)有一個(gè)更好的辦法呢?
本文出自:億恩科技【www.3cym.cn】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |
京公網(wǎng)安備41019702002023號(hào)