DB/SQL

インデックス(索引)が使われない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'

中間一致・後方一致の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の条件についてお勉強したよ!