このエントリでは、Oracle DB についての挙動理解の整理をしたいとおもいます。 ヒストグラム統計 SQL の実行計画を作成するのはオプティマイザであるわけですが、Oracle のオプティマイザが実行計画を立てるとき、基本的には列値は一様分布に従うという仮定を置きます。このため、このような仮定に沿わないデータ分布を持つテーブルがある場合、オプティマイザは時にとんでもない実行計画を作成する場合があります。 当然ながらこの問題を Oracle も認識していて、それを改善するために収集するのがヒストグラム統計です。これは(Oracle 内部の)統計情報更新ジョブによって収集されるもので、どのくらいの値がどの程度あるのかといった列値の分布情報を収集し、それを実行計画作成時に参照するような動作をします。 たとえば、1億レコードを持つテーブルで、1〜10 までの値が 9999 万レコード存在し、残

