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