日付がYYYY,MMと別項目に数値タイプで入っている場合、
たとえば2001年1月以降のデータを抽出したい時がある。
簡単にすますと、
SELECT * FROM MASTER M WHERE M.START_Y * 100 + M.START_M >= 200101なんてやってしまいがち。でも、これだと、START_YとSTART_Mにインデックスが張られていても、
使用されない。
インデックスを使用するようにするには、計算させなければ良いので、以下のように書き換える。
SELECT * FROM MASTER M WHERE ( (M.START_Y > 2001) OR (M.START_Y = 2001 AND M.START_M >= 01) )応用編として、
M.START_Y * 100 + M.START_M BETWEEN 200004 AND 200103を書き換えてみる
( ( (M.START_Y > 2000) OR (M.START_Y = 2000 AND M.START_M >= 04) ) AND ( (M.START_Y < 2001) OR (M.START_Y = 2001 AND M.START_M <=03) ) )可読性は落ちるけれど、これでインデックスが使用されるようになる。
0 件のコメント:
コメントを投稿