Oracle

我的查詢中使用的這個視圖是什麼?

  • August 7, 2014

我正在執行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_53909802VW_DTP_69531A7E我無法在我的數據庫中找到這些對象。

這些對像是什麼以及它們是如何創建的?

執行計劃中顯示的以 VW_DTP 開頭的視圖是自 11.2 以來可用的基於成本的查詢轉換之一的結果,稱為distinct placement.

它發生在使用該DISTINCT子句的語句中,就像你的一樣。加入表並過濾行,然後找到不同的行,這是一個絕對可以接受的非常明顯的執行計劃。但是,在訪問表時找到不同的行,然後再加入它們可能更有效,並且數據庫可能會根據估計的成本選擇轉換查詢。

引用自:https://dba.stackexchange.com/questions/73448