![Uploading file...]()
原始SQL(均匀执行工夫2s+)
SELECT DISTINCT sidFROM testWHERE cid = 123456AND ( (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