|
草民的补丁 发表于 2012-12-6 09:58 ![]()
is_drop上有索引了,呵呵,not exists的话,效果和not in差不多,就是想把not in转换出去,因为使用的都是 ...
一点疑问:group by的作用没体现出来,
一、在t1中先进行 group by,减少t1的结果集数量
(SELECT t.gem_code FROM gem_picture t WHERE t.is_cover=1 AND t.is_drop=0 GROUP BY t.gem_code) AS t1
二、这样还不行的话,应该就和表中的数据分布有关了
满足t.is_drop=0 、t.is_cover=1 AND t.is_drop=0 这两个条件的数据量占全表数据量的比例比较高,即使is_drop=0有索引,也会进行全表扫描
可以反向考虑尝试下。
由于WHERE k.is_drop=0这个条件是无法改变的,只能改变join的 t1结果集
LEFT OUTER JOIN (SELECT t.gem_code FROM gem_picture t
WHERE t.is_drop!=0 or (t.is_cover!=1 AND t.is_drop=0)
) AS t1 ON k.gem_code=t1.gem_code
WHERE k.is_drop=0 AND t1.gem_code IS NOT NULL
|
|