【SQL入門】クエリ(sql)実行後、DBMSでなにが行われているのか
【今回の内容】
今回の題材である
「クエリ(sql)実行後、DBMSでなにが行われているのか」
簡易なSQLを作成できるようになってからずっと疑問に思っていた事。
今回自分で調べたのでしまとめました。
情報元については以下のサイトを参考にしました。
どれもわかりやすくSQL初心者の自分でもわかりやすかったです。
【内容】
■SQLの特徴
①非手続き型
「なにをするか」だけ命令すればよい
→どこにデータがあるかやアクセス方法を知る必要はない
■DBへのアクセス手続きの中身
クエリの実行計画メモ
①クエリの渡す
②パーサ(構文解析)が構文をチェック
③オプティマイザ(最適化)最適化とコスト評価を行う
インプットはカタログマネージャ(統計情報)である
カタログマネージャ(統計情報)には
・各テーブルのレコード数
・インデックス
・列内のNULL数
な度が格納されている
※インプットが最新化されていないと最適な実行計画を作成できないことがある
最新化されていることをDBエンジニアは確認しなくてはならない
④プラン評価を行う
作成された実行計画を評価する
■実行計画の中身
実行計画の中身は、使用するDBMSによって異なる
※実行計画は、以下のコマンドで確認できる
Oracle set autotrace traceonly SQL文
SQL Server SET SHOWPLAN_TEXT ON SQL文
MySQL XPLAIN EXTENDED SQL文
PostgreSQL EXPLAIN SQL文
共通するのは
①対象オブジェクト
②オブジェクト操作
③対象レコード数
たとえばselect * from テーブル名
シーケンシャルスキャン(順次検索)が行われていることがわかる
■メモ
①クエリ発行後の流れがわかるのはおもしろい
普段はこういった情報がほしいというクエリを作成し発行する
だけ。
だが、今回はそのクエリがどういった流れで解釈され実行されていくのか
について少し理解が進み、単純におもしろかった。
実行計画を立てる過程において各DBMSで違いがあるのも興味深くて
なぜそのような作りの違いが生じたのかその理念とか哲学とかに
これから触れることができればもっとおもしろいなと思う