SQL文のパフォーマンスで困ったことはありませんか?そもそも、インデックスが効いていない!ってこともあると思います。今回はインデックス(索引)が使われないSQLの条件と例を見ていきましょう。
今回はインデックスが使われないSQLの条件についてお勉強しましょう!
目次
インデックスが使われないSQLの条件
NULLを検索
検索条件の列にインデックスが張られていても、NULLを検索するために、IS NULLを使うとインデックスは使われません。
一般的なDBMSは索引データの中にNULLが存在しないため、IS NULL を使用するとインデックスが使用されません。
SELECT * FROM table WHERE id IS NULL;
否定構文
検索条件に否定構文(<>, !=, NOT IN)を使うとインデックスが使用されません。
<>
SELECT * FROM table WHERE id <> 0;
!=
SELECT * FROM table WHERE pet != 'dog';
SELECT * FROM table WHERE pet != 'dog';
中間一致・後方一致のLIKE検索
LIKE検索でインデックスを使用するのは前方一致のみです。中間一致・後方一致ではインデックスが使用されません。
中間一致
中間一致ではインデックスが使用されません。
SELECT * FROM table WHERE adress LIKE '%東京%';
後方一致
後方一致でもインデックスが使用されません。
SELECT * FROM table WHERE adress LIKE '%東京';
前方一致
前方一致ではインデックスが使用されます。
SELECT * FROM table WHERE adress LIKE '東京%';
OR条件
検索にOR条件を使用しているとインデックスが使用されません。
SELECT * FROM table WHERE age = 10 or age = 20;
関数
検索に関数を使用しているとインデックスが使用されません。
SELECT * FROM table WHERE SUBSTR(name,3,2)= '太郎';
演算
検索に演算を使用しているとインデックスが使用されません。
|| 演算子
SELECT * FROM table WHERE name || '様' = '鈴木花子様';
算術演算子
SELECT * FROM table WHERE price * 1.1 > 1000;
複合インデックスの順番
複合インデックスの場合、インデックスが使用されるためには条件があります。
インデックス作成
インデックスを{col1 ,col2}で作成します。
CREATE INDEX idx1 table (col1 ,col2);
インデックスを使う例
検索条件が{col1 ,col2},{col1}の場合インデックスを使用します。
SELECT * FROM table WHERE col1 = '1' AND col2 = '1';
SELECT * FROM table WHERE col1 = '1';
インデックスを使わない例
検索条件が{col2}、順番が逆{col2 ,col1}の場合インデックスを使用しません。
SELECT * FROM table WHERE col2 = '1';
SELECT * FROM table WHERE col2 = '1' AND col1 = '1';
まとめ
今回はインデックスが使われないSQLの条件と例を見ていきました。ぜひ参考にしてみてください。
今回はインデックスが使われないSQLの条件についてお勉強したよ!