76
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

インデックスが使えない検索条件

いっつも忘れるのでいい加減Qiitaに書いとくことにした。初歩的な内容。

中間一致・後方一致のLIKE文

インデックスが使えないクエリ。

中間一致.
SELECT ID FROM USER WHERE USER_NAME LIKE '%岡賢%'
後方一致.
SELECT ID FROM USER WHERE USER_NAME LIKE '%岡賢一' 

これはインデックスが使える。

前方一致.
SELECT ID FROM USER WHERE USER_NAME LIKE '長岡賢%' 

インデックス列で演算をやっている

インデックスが使えないクエリ(PRICE列にインデックスが張られているものとする)。

インデックス列で演算をやっている.
SELECT NAME FROM GOODS WHERE PRICE * 10 > 100000 

これはインデックスが使える(PRICE列にインデックスが張られているものとする)。

右側に式を書けばOK.
SELECT NAME FROM GOODS WHERE PRICE > 100000/10

IS NULLを使っている

PRICE列にインデックスが張られているものとする。

インデックス列に対してISNULL.
SELECT NAME FROM GOODS WHERE PRICE IS NULL

インデックス列に対して関数を使っている

PRICE列にインデックスが張られているものとする。
これに対して関数(MAX、MIN、LENGTH等)を使っている。

インデックス列に対して関数を使っている.
SELECT NAME FROM GOODS WHERE MAX(PRICE) = 100000

インデックス列に否定形を使っている

PRICE列にインデックスが張られているものとする。
これに対して否定形(<>、!=、NOT IN)を使っている。

インデックス列に対して否定形を使っている.
SELECT NAME FROM GOODS WHERE PRICE <> 100000

参考

SQL実践入門 高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
76
Help us understand the problem. What are the problem?