プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • SQL
  • 【SQL】ヒント句について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【SQL】ヒント句について

05.03

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

オプティマイザは、SQLを解析して、実行計画を作成します。

「オプティマイザ」については下記の記事でも解説しています。

【Oracle】オプティマイザとは?

しかし、意図したとおりの実行計画を作成してくれないケースがあります。

その際に使用するのが、「ヒント句」になります。

オプティマイザはどのような時に最適な実行計画を作ってくれない?

  • オプティマイザ統計が古くて実態とかけ離れている場合
  • 複雑すぎるSQLの場合(結合が5つ以上あるような)

ヒント句とはどのようなものか?

あらかじめ、SQLに設定することで、統計情報が完全に取得できてない場合でも、最適な実行計画になるようにオプティマイザを導きます。

構文

1
/*+ ヒント内容 */

具体例

select文のselect句の後などに追加します。こうすることで指定したテーブルに対して指定したインデックスでインデックススキャンを実施します。

1
select /*+ INDEX(users user_id)*/ * from users

もし、「テーブル名 as t」などと別名を使用していた場合はヒント句には別名を指定しないと動かないので注意です。(別名を使っていない場合は実テーブル名の指定で問題ないです。)

ヒントの種類

ヒント 説明
CHOOSE オプティマイザモードをCHOOSEにする。
RULE RBO固定にする。
FIRST_ROWS オプティマイザモードをFIRST_ROWSにする。
ALL_ROWS オプティマイザモードをALL_ROWSにする。
FULL(<テーブル名>) 指定されたテーブルのフルテーブルスキャンを行う。
INDEX(<テーブル名><索引名>) 指定されたテーブルのアクセスに指定された索引を使用する。
INDEX_DESC(<テーブル名><索引名>) 指定されたテーブルのアクセスに指定された索引を逆順に使用する。
USE_NL(<テーブル名>) 指定されたテーブルが結合される際に、ネステッドループ結合を使用する。
USE_MERGE(<テーブル名>) 指定されたテーブルが結合される際に、ソート/マージ結合を使用する。
USE_HASH(<テーブル名1><テーブル名2>) 指定されたテーブルが結合される際に、ハッシュ結合を使用する。
ORDERED FROM句に記述された順番でテーブルを結合する。

たくさんありますが、実際によく使うヒント句はそう多くないです。(INDEX、FULL、USE_HASHなど)

ヒントの中に出てくる、「テーブルのスキャン」に関する用語については下記の記事でも解説しています。

【Oracle】実行計画作成後のSQL実行時の動作の仕組み(アクセス方法)

 

スポンサーリンク
  • 2018 05.03
  • miyabisan2
  • コメントを書く
  • SQL
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2020 08.15

    【SQL】読みやすいSQLを作るための手法(WITH句)

  2. 2018 06.22

    【SQL】「制約」の種類と使い方

  3. 2021 10.30

    【SQL】INとEXISTS、JOINの違い

  4. 2021 11.07

    【SQL】「WHERE + OR」か「UNION」を使った方が良いか?

  5. 2018 05.17

    【データベースツール(SQL Developer、A5:SQL Mk-2)】データの絞り込み方

  6. 2021 11.07

    【SQL】「集合演算」について(UNION,EXCEPT,INTERSECT)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Oracle】実行計画作成後のSQL実行時の動作の仕…

【SQL】実行計画を調べるEXPLAIN PLANコマ…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー