interlude

プログラミングや私的なこと

リレーショナルエンジンについて調べた

リレーショナルエンジンとは

リレーショナルデータベースの頭脳とも言える部分で、主に

という仕事をしています。

SQL文の解析(パース)

SQLはStructured Query Language(構造化した問い合わせ言語)なので、プログラミング言語のように機械が分かるように翻訳してあげないといけません。プログラマが発行した(書いた)SQLをまずはここで翻訳します。

SQL文の最適化(オプティマイズ)

オプティマイザともいいます。ここではSQLでもらった指示をどうしたら効率よく実行できるかを考えて(計画して)います。
考えるための基にしているのは統計情報(カタログマネージャ)といって、「レコードの件数が何件あって、カラムが幾つあって、サイズが...」という情報が格納されています。とても賢いですね。 しかし、計画はあくまで計画なので、実行したら遅かった。。なんてこともあります。

実行計画が悪くなる理由としては

  • 統計情報が無いか古い
  • 実行計画を作ったのが古い
  • 実行計画の候補が多すぎて途中であきらめた

などがあります。こういった問題を解消するためには、少なくとも統計情報は最新にしておくべきです。 MySQLには統計情報を更新するコマンドがあり、以下のように書きます。

ANALYZE TABLE <スキーマ名>.<テーブル名>;

ただ、最近は自動で更新されるみたいですね。

nippondanji.blogspot.jp

MySQLはネステッドループというアルゴリズムで結合しているそうなのですが、アルゴリズムの話はまた後で。