skillup

技術ブログ

Database

オプティマイザと実行計画

投稿日:2016年7月28日 更新日:

データベースがSQLを受け取って処理を実行する前には下記のような段階があります。

パーサー

SQL構文のチェックします。これは一般的なプログラムのチェックと同様かと思います。

オプティマイザ

最適なSQL情報を計画します。同じSQLを実行する場合でも複数の経路があるため、カタログマネージャーを参照し、どの経路が最適化を選択します。

カタログマネージャー

統計情報の照会をします。

統計情報というのは具体的には下記のような情報です。

  • 各テーブルのレコード数
  • 各テーブルの列数と列のサイズ
  • 列値のカーディナリティ(値の個数)
  • 列値のデータ分布(どの値がいくつあるかのヒストグラム)
  • 列内のNULLの数
  • インデックス情報

これらによって最適な経路というのは違ってくるため、これらの情報をオプティマイザに伝えます。

大きいデータがあった時にはこの統計情報を更新する必要があるようですね・・・知らなかった・・

ただ、実際には更新せずに「凍結」という状態にすることもあるようです。

テーブルからデータの取得

最適と思われる実行計画にのっとり、データを取得する。

流れでいうと1→(2⇔3)→4となるようです。

参考リンク

【SQL入門】クエリ(sql)実行後、DBMSでなにが行われているのか
Bアタマアカデミー 第4回 クエリ評価エンジンと実行計画―“シェフおまかせ”はいつも美味しいのか(1)

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

slow-query-logについて

データベースを伴う部分でののチューニングですが、大きく分けると SQLを書き直す インデックスを張りなおす プログラム内部でキャッシュを有効化する 設定ファイルの修正 上記のようなかんじになるのではな …

no image

SQLインジェクション

セキュリティ関係の知識がぬるいのでちょっとお勉強。 知っていることもあるが復習もかねて勉強を。 Contents1 SQLインジェクションとは?2 被害3 対策4 参考サイト・書籍5 ソース SQLイ …

no image

アンチパターン データ分身の術+DBの不要な連携+バージョンアップ未テスト

今回のアンチパターンは主にデータ設計に関する部分。 Contents1 同一データの使用1.1 デメリット1.2 対策2 DBの不要な連携2.1 デメリット2.2 対策3 サーバーの移行やバージョンア …

no image

DBの構造について メモリとHDD

データベースについてまたまた学習中。 覚えておきたいポイントなど。 データを収めておくべき媒体では「記憶コスト(単位金額当たりの容量)」と「アクセス速度」の2つが重要なパラメータ メモリとHDDでは前 …

no image

jQuery modalダイアログについて&重複時間処理

Contents1 jqueryモーダルダイアログ1.1 あらかじめ読み込むライブラリ1.2 ソース本体1.2.1 Html側1.2.2 Javascript側1.2.3 参考リンク2 重複時間につい …