引用
引自文章1:https://www.cnblogs.com/wangzhen3798/p/7630602.html
引自文章2:https://www.jb51.net/article/65680.htm
感謝前輩們趟坑分享。
背景
統計某時段關鍵詞的所有總數,也包含null (statistics 有400w+的數據,表大小爲 600M),故
寫出sql:
select count(distinct keyword) +1 as count from statistics;
問題
雖然是後臺查詢,但是太慢了,執行時間爲爲 38.6s,那怎麼優化呢?
解決
方法1(治標)
把這個定時執行,然後把sql結果緩存下,然後程序訪問緩存結果,頁面訪問是快了些,但是本質上還沒有解決sql執行慢的問題。
方法2(治本)
優化sql,首先說說 count( distinct FIELD) 爲啥這麼慢,此處不再贅述了,請看 前輩的說明:https://www.jb51.net/article/65680.htm
優化內容:
select count( distinct FIELD ) from table
修改爲
select count(1) from (select distinct FIELD from table) as foo;
比較
執行過程比對,可以使用 explian anaylze sql語句 查看