読者です 読者をやめる 読者になる 読者になる

FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【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 テーブル名

といったSQLを発行し、各DBMSの実行計画をみると

シーケンシャルスキャン(順次検索)が行われていることがわかる


■メモ

①クエリ発行後の流れがわかるのはおもしろい

 普段はこういった情報がほしいというクエリを作成し発行する
 だけ。
 だが、今回はそのクエリがどういった流れで解釈され実行されていくのか
 について少し理解が進み、単純におもしろかった。
 実行計画を立てる過程において各DBMSで違いがあるのも興味深くて
 なぜそのような作りの違いが生じたのかその理念とか哲学とかに
 これから触れることができればもっとおもしろいなと思う

 

②インターネットにもやはり良質な情報があること

 とても当たり前なんだけど、今回改めて実感。
 最近、
 「SQL発行する後の流れが知りたい」
 「なぜクエリにより回答速度がかわるのか」
 とかに興味を持っていた
 いくつか書店を回りDB関連書籍を広げてみても
 基本的なSQLの書き方やDB設計のやり方ばかりで
 なかなか自分の求める情報がなかった
 最下部に記載させていただきますが、
 かなりわかるやすい記事
 またRDBについて体系的に紹介されているサイトが存在し、
 インターネットって便利だなと。

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }