我想知道 Oracle 或資料庫管理器如何通過更長的腳本和更大的結果作業。我將在下面給出一個例子和一些問題:
SELECT order.nr, order.date, order.datesent, items.id, items.name
FROM orders
LEFT JOIN items ON orders.itemid=items.id
LEFT JOIN customer ON orders.custid=customer.id
LEFT JOIN shipper ON order.shipperid=shipper.id
LEFT JOIN production ON production.itemid=items.id
LEFT JOIN sales ON sales.orderid=orders.id
LEFT JOIN transport ON orders.transid=transport.id
- 即使我沒有在 SELECT 中使用它們,腳本是否會遍歷所有表?
- 一般來說,如果它帶回大量資料,這會減慢腳本的執行速度嗎?
uj5u.com熱心網友回復:
即使我沒有在 SELECT 中使用它們,腳本是否會遍歷所有表?
SQL 引擎將處理所有列值,因為它需要知道id任何表中是否存在重復值,如果存在,則輸出中將存在重復行。但是,它不一定執行全表掃描,因為它總是可以使用索引(假設您在索引列上連接)。
id理論上,如果連接表的列上有索引,優化器可以決定不打擾不必要的連接UNIQUE,因此永遠不會有任何重復并且不會回傳資料;但同樣有可能不使用該優化或保證該條件的索引不存在。
最好的解決方案是查看EXPLAIN PLAN查詢,然后您將看到實際執行了哪些連接以及是否使用了表或索引掃描。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467497.html
