オラクルがSQLを実行するときに、実行計画を立てる。その方式にルールベースオプティマイザ(RBO) とコストベースオプティマイザ(CBO)があるのは、周知のとおり。ルールベースならインデックスがあるというだけで利用するのに対し、コストベースでは事前に取得した統計情報を元に、使うインデックスやそもそもインデックスを使うのか検討する。
どちらも人の目から見ると、使ってほしいインデックスを無視することがある。そんなときはSQLにヒント句をもぐり込ませると、意図したインデックスを使ってくれるようになる(ヒント句にはもっといろいろな指示ができる)。
ところがSQLにヒント句を入れると、そのSQLはコストベースで動くようになる。ヒント句で指示を出したんだからルールベースになるような気がしていたので、ちょっと意外。
コメントする