Als ik de execution plans bekijk van de 2 volgende queries afgevuurd op SQLServer 2000 dan word ik er niet echt wijs uit welke nu sneller is. Heeft iemand meer info welke query sneller is (dus een linkje naar text waar uitgelegd staat waarom is genoeg) en ook of dit op oracle ook zo is? (Oracle heeft nog niet zo lang een real-time optimizer dus ik weet niet of die al up to par is)
Query werkt op northwind database
query 1:
Query 2:
De distinct in query 1 is nodig anders krijg je dubbele rijen. (is op zich een nadeel). Ik ben geneigd te zeggen dat query 1 sneller is, want de operaties zijn simpeler, echter dit kan schijn zijn. Ik ben bezig met een dynamic query builder voor mn ORM framework generator dus dat je in code via simpele statements een query kunt bouwen ala:
Query q = new Query(CustomerEntity, Relations.Customers.Orders.Order_Item.Products, ProductsEntity.ProductName, Operators.Equals, "Tofu");
en het gaat er mij nu om wat het beste is hoe ik die query genereer: (ja dat 'tofu' wordt een parameter
) middels joins of middels subqueries.
bedankt alvast
Query werkt op northwind database
query 1:
SQL:
1
2
3
4
5
6
7
8
9
| SELECT DISTINCT Customers.* FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID = Products.ProductID WHERE Products.ProductName = 'Tofu' |
Query 2:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| SELECT * FROM Customers WHERE CustomerID IN ( SELECT CustomerID FROM Orders WHERE OrderID IN ( SELECT OrderID FROM [Order Details] WHERE ProductID IN ( SELECT ProductID FROM Products WHERE ProductName = 'Tofu' ) ) ) |
De distinct in query 1 is nodig anders krijg je dubbele rijen. (is op zich een nadeel). Ik ben geneigd te zeggen dat query 1 sneller is, want de operaties zijn simpeler, echter dit kan schijn zijn. Ik ben bezig met een dynamic query builder voor mn ORM framework generator dus dat je in code via simpele statements een query kunt bouwen ala:
Query q = new Query(CustomerEntity, Relations.Customers.Orders.Order_Item.Products, ProductsEntity.ProductName, Operators.Equals, "Tofu");
en het gaat er mij nu om wat het beste is hoe ik die query genereer: (ja dat 'tofu' wordt een parameter
bedankt alvast
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com