1. インデックスヒントとは?
SQLの**インデックスヒント(INDEX HINT)**とは、データベースに対して「このテーブルでは特定のインデックスを使用して実行してほしい」と明示的に指示するための構文です。
通常、DBエンジン(オプティマイザ)が自動で最適な実行計画を選びますが、統計情報が古い・複雑な条件句などの場合に誤ったインデックスを選ぶことがあります。
そのようなとき、開発者が明示的にインデックスを指定して最適化を誘導するのがINDEX HINTの目的です。
2. 一般的な書き方
Oracleの場合
MySQLの場合
SQL Serverの場合
データベース | ヒント指定方法 | 備考 |
---|---|---|
Oracle | /*+ INDEX(テーブル名 インデックス名) */ | ヒント句はコメント形式 |
MySQL | USE INDEX (インデックス名) | FORCE INDEX / IGNORE INDEX も可 |
SQL Server | WITH (INDEX(インデックス名)) | テーブルヒントとして指定 |
3. MySQLにおけるINDEX HINTの種類
種類 | 意味 | 使用例 |
---|---|---|
USE INDEX | 指定したインデックスを優先的に使用 | USE INDEX (idx_col1) |
FORCE INDEX | 指定インデックスを強制的に使用 | FORCE INDEX (idx_col1) |
IGNORE INDEX | 指定インデックスを無視して検索 | IGNORE INDEX (idx_col1) |
4. 実行計画を確認する
インデックスヒントを付与したら、実際に利用されているかを確認することが重要です。
MySQL
Oracle
5. 使用上の注意点
注意点 | 内容 |
---|---|
1. 過信しない | ヒントは一時的なチューニングであり、将来的な統計情報変化で逆効果になることも。 |
2. 実行計画を常に確認 | ヒント適用後は EXPLAIN で確認すること。 |
3. SQL互換性に注意 | 各DBMSで構文が異なるため、移植性が下がる。 |
4. ヒント指定よりも統計情報更新が基本 | 統計情報を更新することで自動最適化が正しく働くことも多い。 |
6. 実用例:複合インデックスを明示的に使用
以下のように複数条件を持つ検索で、DBが誤ったインデックスを選ぶ場合に有効です。
このように、複合インデックスの指定順序に合わせてヒントを指定することで、不要な全件スキャンを防ぐことができます。
7. まとめ
ポイント | 内容 |
---|---|
自動最適化が基本 | まずはDBエンジンに任せるのが原則 |
ヒントは最終手段 | 特定クエリで誤選択時のみ使用 |
EXPLAINで検証 | 効果を数値で確認 |
統計情報更新も忘れずに | オプティマイザの精度を保つために重要 |