page_adsence

2012年12月17日月曜日

MySQLのIN句のインデックスに関して

IN句はインデックスが使用されない。
なぜかというと、1レコードごとに全レコードの値を取ってきているから。

あと、インデックスの使うためには、本来あるフィールドに対して、関数を利用したものと比較する際には、インデックスは使用されない。

これはインデックスが使われる
TO_CHAR(YYYY-MM-DD, 'YYYYMMDD') = 20121217

本来は逆であるべきだが、

YYYY-MM-DD = TO_DATE('YYYYMMDD')

みたいなのはインデックスが使用できない。Oracleの場合はfunctionIndexが使えるので、それで対応できるらしい。