カーディナリティ

DBの集合論的な基礎はある程度理解しているつもりでありましたが、この「カーディナリティ」って用語は初めて知りました。

カーディナリティとは、レコード中の一意な値の個数を指します。例えば、性別データ(男、女)のように値の種類が少ない場合には、カーディナリティが低いといいます。逆に社員番号のようにほとんどの値が一意である場合は、カーディナリティが高いといいます。

ORACLEのコストベースアプローチのオプティマイザに関して調べていてのことです。私は、最近バリバリの開発は行なっていないので、ORACLEオプティマイザというと昔のルールベースアプローチの最適化のイメージしかもっておりません。ところが最近では、このコストベースアプローチのオプティマイザが推奨されてて戸惑います。もっとも、よっぽどデータ件数が膨れ上がったテーブルが複雑にリレーションされていないかがり単純なSQL実行ではパホーマンスチューニングが必要になるようなことはありませんでしたけどね。このように、コストベースでは、データベースのカーディナリティやデータ分布状況などの統計情報を取得して、SQL実行コストを最適化する方法を見つけ出して実行計画を生成する方式です。動的に変化してゆくデータに対して統計情報を取得するたびに最適化された実行計画に従ってSQLが実行されると言うものです。しかしパフォーマンスチューニングにおける現実は厳しく、一度パフォーマンス劣化の事象に遭遇すると、ルールベースのときよりも解析が困難であるような気がします。実際に生成された実行計画と統計情報をにらんで、ヒント句による調整を繰り返さないといけません。