IN语句:
SELECT * FROM order WHERE status IN (1,2,3)
EXISTS语句转换:
SELECT * FROM order a WHERE EXISTS(
SELECT * FROM (
SELECT 1 AS type UNION ALL
SELECT 2 AS type UNION ALL
SELECT 3 AS type
) b WHERE b.type=a.type
)
该代码用到了临时结果集的概念
SELECT * FROM (
SELECT 1 AS type UNION ALL
SELECT 2 AS type UNION ALL
SELECT 3 AS type
) b
结论:
IN肯定会走索引,但是当IN的取值范围较大时会导致索引失效,走全表扫描,如果使用了 not in,则不走索引