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