アクセスプランの勉強してきました。
今までもClubDB2で取り上げていただいたのですが、いろいろと参加できなくて初めての経験でした。
資料はこちら
演習問題
https://www.ibm.com/developerworks/community/wikis/form/anonymous/api/wiki/4ac81e67-d1c5-430f-969d-249fd346e68c/page/9bd90677-07e3-4612-9008-0502ddfd65e8/attachment/466af8cf-6880-414e-b873-1f0e64a2761a/media/DB2%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%97%E3%83%A9%E3%83%B3%E5%85%A5%E9%96%80_%E5%95%8F%E9%A1%8C.pdf
演習問題回答
https://www.ibm.com/developerworks/community/wikis/form/anonymous/api/wiki/4ac81e67-d1c5-430f-969d-249fd346e68c/page/9bd90677-07e3-4612-9008-0502ddfd65e8/attachment/6edffe0c-3685-4907-bd16-f0c5ce59a816/media/DB2%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%97%E3%83%A9%E3%83%B3%E5%85%A5%E9%96%80_%E8%A7%A3%E7%AD%94.pdf
アクセスプランとは、実行計画。DBがデータにアクセスときの計画です。
これは、取得した統計情報をもとにDBが最も早くデータにアクセスする方法の計画です。
あくまでも計画なのでDBが思っているだけです。実際のデータアクセスはSQLを実行するまでわかりません。
とはいえ、データベースの保守とやっている人はアクセスプランの読み方を知っておかないとDBのレスポンス遅延が発生したときに調査できませんので、是非勉強したいものです。
アクセスするときに最もポイントになるのが、インデックスがあるかどうかです。
インデックスを使うと早くなることが多いです。
インデックスを使うかどうかどうかは抽出するデータが総データ容量の半分以下のときは使用した方が早いです。逆に半分以上の場合は、データを総舐めする方が早いです。
後は、メモです。
・インデックスは張るっていう。データベースは作るっていう。不思議!
・アクセスプランが変わる可能性
・データサイズ
・使用可能のインデックスの有無
・その他リソースの影響
・インデックスは絞り込める場所に張ろう・EXPLAINを取得する方法をしないとサポートに問い合わせできないぞ!
・DB2のコマンドはDOSでも動くように8文字になっている。
・filter factor=絞り込める割合
・アクセスプランは思っているだけ。実際は統計情報が古い可能性が高くずれてしまう。
アクセスプランと実行結果の差が大きいときはやばいので対処が必要。
・リアルタイム統計情報取得をOFFにする判断基準
・コストベースとルールベースがある。
DB2は基本的にコストベース。指定もできるけどおすすめしない。
・ネステッド・ループ・ジョインは小さいテーブルのとき最速。