#レスポンス改善はオプティマイザの気持ちになれば簡単
そんなことをよく聞く。
最初はオプティマイザってなんやねんって感じですが、先輩方の話はしっかり聞くべき。
ってことで、オプティマイザと友達になるために、いろいろ調査したまとめ!
##オプティマイザとは
一言でいうと処理を最適に行うための機能。
オプティマイザはその名の通り『最適化』を目的とし、現在のDBに対しSQLから最も最適なデータ取得処理を生成する。
##SQL文通りにデータを取得すれば、いいだけじゃないのか?
SQLはどのテーブルからどのようにデータを取得するかを記述したものでDBからどのようにデータを取得するかは書いていない。
つまり最適化された、実行計画を作成し、実行させるのがオプティマイザ。
SELECT * FROM Shain WHERE ShainName = '田中'
このようなSQL文の場合は、どのインデックス利用するか等。
結合があるがある場合は、結合方式を決定するのも、オプティマイザ。
##そんな優秀なオプティマイザがあるならなんでレスポンスが悪くなるの??
常に最適な実行プランを選定してくれる、オプティマイザ様がいるならレスポンスなんてこっちで気にする必要なんてないじゃん。
とはならないのが悲しいところ。
そもそも、適切なINDEXが無かったら現状で最適な実行計画なだけで、実際に早いわけではない。
常に必要なINDEXを想定しながら、開発してきたい。
##じゃぁ何を元にオプティマイザは実行プランを決定するの?
ずばり統計情報というものを元に、コストを評価し実行プランを生成する。
統計情報とは。
表やインデックス、使用している領域、データの種類、データの分布等のデータ特性を表す情報のこと。
具体的には・・・・
・各テーブルのレコード数
・各テーブルの列数と列のサイズ
・列値のカーディナリティ(値の個数)
・列値のデータ分布(どの値がいくつあるかのヒストグラム)
・列内のNULLの数
・インデックス情報
この情報だけ見ても、なんだか確かに最適解を取ってきてくれそうな気がしますね。
ただ実際は統計情報をただ闇雲に信じればいいということでもない・・・・
これは次回のまとめていきます。