インデックス(索引)が使われないSQLの条件と例

インデックス

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の条件についてお勉強したよ!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次