web-dev-qa-db-ja.com

クエリで使用されているこのビューは何ですか?

このクエリでEXPLAIN PLANを実行しています:

SELECT DISTINCT l.item_num, l.repl_code
FROM item_w l
JOIN item i ON l.item_num = i.item_num
LEFT JOIN item_w r ON l.item_num = r.item_num AND l.repl_code = r.whse_code
WHERE r.whse_code IS NULL 
  AND l.repl_code IN (SELECT DISTINCT whse_code FROM item_w)
  AND i.sa_item NOT LIKE 'Z%'
ORDER BY l.item_num, l.repl_code

クエリは希望どおりに機能しますが、計画では、データベースで見つけることができないVW_DTP_F6D0ECADVW_DTP_53909802、およびVW_DTP_69531A7Eという名前のオブジェクトを使用していることが示されています。

これらのオブジェクトとは何ですか?また、どのように作成されていますか?

2
Michael McGriff

実行プランに表示されるVW_DTPで始まるビューは、11.2以降に使用可能なコストベースのクエリ変換の1つであるdistinct placement

これは、あなたと同じように、DISTINCT句を使用するステートメントで発生します。テーブルを結合して行をフィルタリングし、その後、個別の行を見つけることは、非常に明白な実行プランとして絶対に受け入れられます。ただし、テーブルへのアクセス時に個別の行を見つける、beforeそれらを結合する方が効果的である可能性があり、データベースは推定コストに基づいてクエリを変換することを選択できます。

2
Balazs Papp