はじめに
最近、SQLについて勉強し始めたのですが、SQLを実行するときに実行計画というものが立てられていると知りました。業務で頻繁にSQLを使うのですが、指定した項目を取ることにいっぱいいっぱいで中で何をしているかなんて考えたことがなかったので意識するついでに書いておこうと思います。
実行計画とは
実行計画とは、データをどのようにして検索するかが書かれた計画書で、実行計画によって検索が速くなったり、遅くなったりすることもあるようです。
SQL実行で起きていること
実行計画はSQLを実行してからデータにアクセスするまでの流れの中で使われているので、簡単にSQL実行中に起きていることを書いておきます。
SQL実行をすると、上記のような流れで処理が進むみたいです。
パーサ
パーサには2つの役割があります。
1つ目がSQLの構文チェック、2つ目がSQLをDBMSが処理しやすい形式に変換することです。
例えば下記のようにカンマを書き忘れたSQL構文が実行されてきた場合、パーサがチェックして通さないようにしているようです。
カンマなしSQL
SELECT
ID
NAME
FROM
USER
僕は条件を複数書くときのANDをよく忘れてしまうのですが、パーサがチェックしてくれるおかげで、誰かに指摘される前に直すことができています。ありがたいです。
AND忘れSQL
SELECT
ID
,NAME
,ADDRESS
,PCODE
FROM
USER
WHERE
ID = 1
ADDRESS = '東京都'
また、SQLの変換を行うことで、後の処理を効率化する役割があります。
オプティマイザ
パーサから送られてきたSQLからできる限りの実行計画を作成し、その中から最も低コストな実行計画に絞り込む処理を行っています。
ここで、今回の主題である実行計画が作られています。
カタログマネージャ
オプティマイザに実行計画を立てる際の情報を提供する役割を持ちます。
カタログマネージャが持つ情報はテーブルやインデックス群などの統計情報です。この統計情報を元にオプティマイザは実行計画を作成しています。
プラン評価
オプティマイザが作成した実行計画を最終的に実行する1つに絞り込む役割を持ちます。
実行計画の確認方法
せっかく学んだので次にSQLを触るときに、実行計画を確認してみようと思います。
実行計画の確認はコマンドでできます。DBMSによって異なりますが、一応載せておきます。
名前 | コマンド |
Oracle | set autotrace traceonly |
Microsoft SQL Server | SET SHOWPLAN_TEXT ON |
DB2 | EXPLAIN ALL WITH SNAPSHOT FOR SQL文 |
PostgreSQL | EXPLAIN SQL文 |
MySQL | EXPLAIN EXTENDED SQL文 |
OracleとMicrosoft SQL Serverでは、上記のコマンドの後に対象のSQL文を実行する必要があります。
最後に
SQLは業務内でよく使うし、エンジニアが長く使ってきてるものだと思うので、しっかりと勉強して、自信満々にデータを取得できるようになりたいですね〜
まだまだ、基礎的な構文の基礎的な使い方を少し知っているだけなので、伸び代があると思って頑張ろうと思います。
実行計画は面白いと思ったので、色々試しながら勉強していきます!
コメント