変更内容
以下のルールでアクセスプランを作成します。
インデックスキーまたはクラスタキーにCASTを指定すると、そのキーでインデックスの範囲検索またはクラスタキー検索を行いません。
四則演算の検索範囲について、インデックス範囲検索やクラスタキー検索を行いません。
以下のルールでアクセスプランを作成します。
インデックスキーまたはクラスタキーにCASTを指定すると、そのキーでインデックスの範囲検索またはクラスタキー検索を行います。
四則演算の検索範囲について、インデックス範囲検索やクラスタキー検索を行います。
非互換
本性能改善を適用した環境では、ほとんどの場合、性能が向上します。しかし、一部のSQL文で性能が悪くなる場合があります。また、CASTを用いた場合、データ型を合わせるように表を再作成した場合と比べて、使用するリソースが増えます。
【性能】
以下の条件をすべて満たす場合、インデックス検索を行うことが原因で処理が遅くなることがあります。
実表と導出表のジョインのSQL文である。
複数のジョインキーがあり、かつ導出表側の一部がインデックス構成列である。
上記のインデックス構成列になっているジョインキーの異なるキー値数が、そのジョインする表の件数と比べて非常に小さい。
上記インデックス構成列から漏れているジョインキーの異なるキー値数が、そのジョインする表の件数に非常に近い。
【リソース】
1つのCASTにつき、メモリ使用量が24バイト増えます。
1つのCASTにつき、作業用テーブル域がCAST後のデータ長×レコード数分増えます。
1つのCASTにつき、作業用ソート域がCAST後のデータ長×レコード数分増えます。
以下の条件をすべて満たす場合、検索するインデックスが変わって処理が遅くなることがあります。
四則演算の検索範囲の述語を指定していて、対応するインデックス(IX1)がある。
定数またはホスト変数の検索範囲の述語を指定していて、上記とは別の対応するインデックス(IX2)がある。
上記の述語をANDで連結している。
実際の検索範囲は、四則演算の検索範囲の方が広い(ヒットするレコード数が多い)。
IX1のデータ分布が偏っているため、異なるキー値数はIX2よりもIX1の方が大きい。
対処方法
6.0.1以前と同等のアクセスプランにしたい場合、動作環境ファイルにSCAN_KEY_CAST=NOおよびSCAN_KEY_ARITHMETIC_RANGE=NOを指定してください。