Mysql SQL語句過長引起的問題
阿新 • • 發佈:2019-01-24
我現在做資料統計,後臺資料庫用的是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的量。
有沒有一個更好的辦法呢?