MySQLのSQLチューニング(IN 演算子)

なかなか面白い結果が出たので備忘録。

TBLテーブルに対し add index idx(COL0,COL1)としてある状況では、


SELECT A.*
FROM TBL A
WHERE A.COL0 = "hoge"
AND A.COL1 IN ('A', 'B', 'C');
よりも

SELECT A.*
FROM TBL A
JOIN (
SELECT 'A' COL1 FROM DUAL
UNION
SELECT 'B' COL1 FROM DUAL
UNION
SELECT 'C' COL1 FROM DUAL
) B
ON A.COL1 = B.COL1
WHERE A.COL0 = "hoge";
とやったほうがパフォーマンスが劇的によくなりました。
同じ結果なのに歴然とパフォーマンスが変わるところがSQLチューニングの醍醐味ですね。

#DUALはダミー表です。ORACLE経験者なら分かると思いますが念のため補足。