クエリのアプリケーションが変更されましたが、理論は同じです。
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 ではありませんが、できる限り多くのことを学ぼうとしています。なぜなら、私はいつもこのようなことを経験していて、その理由がよくわからないからです。