SQL優化—in
阿新 • • 發佈:2021-06-23
原始SQL(執行時間80s+)
SELECT count(id) as id FROM task WHERE cid=100015 AND sid IN(112310,112316,106959,110780,112324,112331,112317) AND flag='9'
優化後SQL(平均執行時間100ms)
select sum(id) as id from ( SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=112310 AND flag=9 union all SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=112316 AND flag=9 union all SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=106959 AND flag=9 union all SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=110780 AND flag=9 union all SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=112324 AND flag=9 union all SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=112331 AND flag=9 union all SELECT count(*) as id FROM task WHERE AND cid=123456 AND sid=112317 AND flag=9 ) t
說明:
mysql版本5.6
表總的資料量60萬+
cid和flag為int型別,引數去掉引號,避免隱式轉換
(cid sid flag)是組合索引,使用uinon all拆分後,遍歷的表多了,使用組全但更高效
本文由部落格一文多發平臺 OpenWrite 釋出!