1. 程式人生 > 其它 >SQL優化—in

SQL優化—in

原始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 釋出!