原始SQL(平均执行时间2s+)
SELECT DISTINCT
sid
FROM
test
WHERE
cid = 123456
AND (
(eid = 7890123)
OR sid IN (
SELECT
sid
FROM
test
WHERE
cid = 123456
GROUP BY
sid
HAVING
COUNT(*) = 1
)
)
430万+数据量的表,索引如下:
KEY idx_eid (eid)
KEY index_0 (cid,type)
KEY index_1 (sid,type,eid)
KEY idx_cs (cid,sid)
优化后SQL(平均执行时间400ms左右)
SELECT DISTINCT sid FROM test WHERE cid = 900458 AND eid = 1021355
union
SELECT sid FROM test WHERE cid = 900458 GROUP BY sid HAVING COUNT(*) = 1
说明:
mysql版本5.6.28
优化前,test和子查询都使用的idx_cs索引,cid 的基数不如eid,所以拆开后第一个test 使用eid索引,第二次使用的idx_cs
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)