0

一般的な概要: 約 8000 万のレコードを含む Oracle テーブル 'product' があり、このテーブルを使用する結合のパフォーマンスを改善したいと考えています。ほとんどの場合、(列) 'valid_until' 日付 (値) 'mm/dd/9999' を持つ (テーブル) 'product' からのレコードの非常に小さなサブセットに関心があります。

可能な解決策:

  • 「mm/dd/9999」を分割し、パーティション交換を使用して新しいデータをすばやくロードします。
  • 'valid_until' 日付のインデックスを使用します。

他に考えられるオラクルのソリューションやアイデアはありますか?

4

1 に答える 1

1

レコードの 1% を検索する必要があることに基づいて、インデックスが適切であると予想します。クエリが現在の製品の PK を見つけるだけの場合は、テーブルの PK も含めるとよいでしょう。

他の有効な日付でレコードを識別する必要がない場合は、次のインデックスを作成して、Oracle の部分インデックスに相当するものを使用する価値があるかもしれません。

case value_until
when date '...whatever the date is...'
then valid_until
else null
end

...しかし、それはクエリを生成するスキーマまたはツール、またはその両方を変更することを意味します。

テーブルの統計を監視して、選択した行のカーディナリティがかなり正確に推定されていることを確認してください。

valid_until 値の更新中の行移行のオーバーヘッドがかなり高くなるため、最初の選択肢としてパーティション ベースのソリューションには行きませんが、インデックスがクエリ パフォーマンスを提供できない場合は、ぜひ試してみてください。

于 2015-05-11T14:25:31.343 に答える