SIGSEGV RSSフィード

2007-05-28

[][][]MySQLSQLチューニング(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経験者なら分かると思いますが念のため補足。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/i_youhei/20070528/1180354791