0

クエリのアプリケーションが変更されましたが、理論は同じです。

4 つのテーブル:

状態 - 状態のリスト (状態のインデックス) ストア - ストア、およびそれらの状態 (状態、ストアの個別のインデックス)ステータス (注文、ステータスの別のインデックス)

特定の州の各ステータスにある注文数をカウントしたいと考えています。

1 つのクエリ:

ストアから os.order_status、count(os.order_status) を選択する sto、store_order so、order_statuses os where sto.state = 'PA' and sto.store = so.store and so.order = os.order group by os.order_status

実際のアプリケーションでは、ここでの showplan は約 500,000 の推定 I/O で返されます

しかし、もしそうなら:

状態 sta、stores、store_order so、order_statuses os から os.order_status、count(os.order_status) を選択します。 order = os.order_status による os.order グループ

I/O は約 2,000 と推定されます。クエリを変更するために行ったのは、states テーブルを store テーブルに結合し、stores ではなく states で正確な値を指定することだけでした。

明示的な値を指定するか、その明示的な値で別のテーブルに参加するかに関係なく、DBM はストアの同じ検索を行う必要がありますか?

推定 I/O がこれほど高い理由を突き止めようとしています。

私は DBA ではありませんが、できる限り多くのことを学ぼうとしています。なぜなら、私はいつもこのようなことを経験していて、その理由がよくわからないからです。

4

1 に答える 1

3

怠惰なボブ、IO統計をオンにして、結果を質問に追加してください:

統計情報をオンに設定

あなたがコメントで報告したように、showplan自体はその情報を提供しません

また、正確な作業クエリを投稿してください - 理想的には、正しくフォーマットされています。

あなたのクエリは「where sta.state = 'PA' where sto.state = sta.state」と言っており、明らかに実行できたものではありません

于 2009-08-24T13:31:21.673 に答える