编辑:我不知道为什么讨厌这个问题,但也许是因为我的问题混乱.我故意用来/*+ ORDERED */控制执行的顺序并改变FROM子句中表的顺序.我想知道为什么执行时间可以改变.是因为连接顺序吗?是因为桌子大小?希望这可以消除混乱.
所以我只是在玩SQL查询并实现以下内容:如果我在FROM子句中更改表的顺序,则执行时间可能会有很大差异.以下查询在大约0.966秒内运行.但如果我转到OrderDetails d最后一个FROM条款,执行只有0.573秒!这有什么原因吗?我当时正在使用ORACLE SQL Developer
SELECT /*+ ORDERED */
su.CompanyName, CategoryName, ProductName, c.CompanyName, c.country,
FirstName, LastName, Quantity, d.UnitPrice, sh.CompanyName
FROM
OrderDetails d, Suppliers su, Shippers sh, Categories t, Products p,
Employees e, Customers c, orders o
WHERE
t.CategoryID = p.CategoryID
AND c.CustomerID = o.CustomerID
AND e.EmployeeID = o.EmployeeID
AND o.OrderID = d.OrderID
AND p.ProductID = d.ProductID
AND sh.ShipperID = o.ShipVia
AND su.SupplierID = p.SupplierID
AND LOWER(ProductName) Like '%lager%'
AND LOWER(c.city) IN ('vancouver', 'london', 'charleroi', 'cunewalde')
AND d.Quantity BETWEEN 5 AND 100
AND (RequiredDate-ShippedDate > 10)
ORDER BY
c.CompanyName;
Run Code Online (Sandbox Code Playgroud)