全テーブルのスキャンニングの回避

照会アプリケーション・プログラミング・インターフェース (API) を使用して、データベース内のオブジェクトをリストする場合、フィルター操作を指定して、取得する結果の範囲を絞ることができます。このフィルターに、オブジェクト属性の値と範囲を指定することができます。

データベース照会の処理時に、フィルター情報が変換され、Structured Query Language (SQL) ステートメントの WHERE 文節に格納されます。この WHERE 文節は、影響を受けるデータベース・テーブル内の列名にオブジェクト属性をマップします。

照会に索引付きテーブル列への変換を行わないフィルターが指定されている場合、SQL ステートメントによってテーブルがスキャンされることになります。 このスキャンニングによって、パフォーマンスに悪影響があり、デッドロックが発生するリスクが高くなります。 このパフォーマンスの悪影響は、1 日に数回のみという程度であれば容認されますが、1 分間に数回という頻度になれば、効率に悪影響を及ぼします。

このような状況では、カスタム索引でこの影響を劇的に抑えることができます。 実際のお客様の状況で、カスタム索引により、API の応答時間を 25 秒から 300 ミリ秒に減らすことができました。データベース・テーブルの 724 000 行を読み取る代わりに、6 行を読み取るだけでよいのです。

指定するフィルター基準により、一部の列が索引に含まれないように設定することができます。該当する場合、テーブル・スキャンを使用し、その結果照会のパフォーマンスが低下する場合は、例えば DB2® Explain を使用して、ステートメントのアクセス・パスを確認してください。必要であれば、新しい索引を定義してください。


(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。