LoginSignup
1
2

More than 3 years have passed since last update.

SQL Server と Oracle のヒント句

Last updated at Posted at 2019-05-30

はじめに

SELECT を発行した時に、どの INDEX を利用するかは、一般的に DBMS のオプティマイザが自動で選択しますが、ヒント句を付加することで、明示的に利用する INDEX を指定することができます。

ヒント句の例

SQLServer

テーブル名 WITH(INDEX(インデックス名))

SELECT * FROM table_hoge WITH INDEX(index_hoge_01)

SQLServer でのヒント句の注意

指定した INDEX が定義されていないと SQL 発行時にエラーになります。

Oralce

SELECT /*+ INDEX(テーブル名 インデックス名) */

SELECT /*+ INDEX(table_hoge index_hoge_01) */ FROM table_hoge

Oracle でのヒント句の注意

テーブルをエイリアスにしている場合は、ヒント句もエイリアス名で指定する必要がある。

SELECT /*+ INDEX(t index_hoge_01) */ FROM hoge_table t

インデックス列に NOT NULL 制約がない場合は、理論上 NULL が引っかかる可能性があるとヒント句を指定しても無視される。

hoge_table.id な null 許可の場合

INDEXが有効
SELECT /*+ INDEX(t index_hoge_01) */ FROM hoge_table t
WHERE id = 'abc'
INDEXが有効
SELECT /*+ INDEX(t index_hoge_01) */ FROM hoge_table t
WHERE id IS NOT NULL
INDEXが有効
SELECT /*+ INDEX(t1 index_hoge_01) */ FROM hoge_table t1
inner join poge_table t2 on t1.id = t2.id
INDEXが無効
SELECT /*+ INDEX(t index_sample_table_01) */ FROM sample_table t
INDEXが無効
SELECT /*+ INDEX(t1 index_hoge_01) */ FROM hoge_table t1
left outer join poge_table t2 on t1.id = t2.id

おわりに

このレベルのメモ書きをアップする際の見やすいテンプレートみたいな形式はありますかね?

1
2
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
1
2