87
82

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-06-27

いっつも忘れるのでいい加減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)

87
82
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
82