1. 程式人生 > >Mysql SQL語句過長引起的問題

Mysql SQL語句過長引起的問題

我現在做資料統計,後臺資料庫用的是MYSQL。有一個常用的需求,查詢未訂購使用者的訪問PV(使用者唯一性標識是使用者手機號);

第一種寫法:

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> 結合,將獲得的手機號的集合拼接成一個字串當SELECT COUNT(1) FROM day_resinlog_2012_06_12 WHERE mobile_number NOT IN (xxxxx)中的xxxxx;

評論:第一種寫法使用了子查詢,這樣速度比較慢,一般是我們不用它的原因,也是我們選擇第二種寫法的原因;

            第二種寫法表面上沒有什麼問題,其實也有一個潛在的風險,假如我們的訂購手機號有幾百萬,就可能會引起伺服器報錯。因為一條SQL如果很長,超過了MYSQL伺服器配置檔案(windows下的my.ini)中的max_allowed_packet的量,就會報錯。解決辦法是改變max_allowed_packet的量。

有沒有一個更好的辦法呢?