5

複雑な oracle sql クエリを作成しました。説明プランの統計は次のようになります。 コスト: 209,201 バイト:187,944,150 カーディナリティ: 409,675

DBA がクエリを調整すると、統計は次のようになります。 コスト: 42,996 バイト: 89,874,138 カーディナリティ: 209,226

私の最初の質問は、数値が低い場合、自動的にパフォーマンスが向上したことを意味するのでしょうか? 最も適切な数値はどれですか?コスト/カーディナリティ/バイト? 私の2番目の質問は、カーディナリティが読み取られた行の数であることを理解しています。しかし、クエリを実行すると、「0」行が返されます! 私の印象では、同じ結果セットを返すはずの 2 つのクエリのカーディナリティは同じでなければなりません。これは間違っていると思いますか?

4

1 に答える 1

4

コスト、バイト、カーディナリティ...すべては、オプティマイザーに与えられた統計などの入力に基づく見積もりです。したがって、それらは自動的に何も意味しませんが、アイデアを与えることができます. Oracle Performance Tuning Guide の言葉を借りると、「EXPLAIN PLAN を使用してアクセス プランを決定し、後でテストによってそれが最適なプランであることを証明するのが最善です。プランを評価するときは、ステートメントの実際のリソース消費を調べます。」

2 番目の質問: 理論的に同等のクエリは、同じカーディナリティを返す必要があります。テーブルの統計が古い可能性があります。

于 2013-02-25T15:00:16.000 に答える