2010-09-17 13 views
1

考慮下表:SQL - 使這個說法更快即持續時間短,讀取

Orders (OrderID, OrderStatus, OrderNumber) 
OrderItems(OrderItemID, OrderID, ItemID, OrderItemStatus) 

訂單:2537個記錄 訂單項目:1319個記錄

我已經創建了

    指標
  1. Orders(OrderStatus)
  2. OrderItems(OrderID)
  3. 的OrderItems(OrderItemStatus)

我有以下SQL語句(由LinqToSql產生的),在執行時,有: - 持續時間= 8789 - 讀= 7809.

exec sp_executesql N'SELECT COUNT(*) AS [value] 
FROM [dbo].[Orders] AS [t0] 
WHERE ([t0].[OrderStatus] = @p0) OR (EXISTS(
    SELECT NULL AS [EMPTY] 
    FROM [dbo].[OrderItems] AS [t1] 
    WHERE ([t1].[OrderID] = [t0].[OrderID]) AND ([t1].[OrderItemStatus] = @p1) 
    ))',N'@p0 nvarchar(2),@p1 nvarchar(2)',@p0=N'KE',@p1=N'KE' 

是否還有其他哪些我可以做得更快嗎?

回答

0

計數,而不是*

+0

你能證明爲什麼會這樣嗎? http://stackoverflow.com/questions/1221559/count-vs-count1/1221649#1221649 – gbn 2010-09-17 17:09:07

0

這可能會產生一些更好的SQL。

IQueryable<int> query1 = 
    from oi in db.OrderItems 
    where oi.OrderItemStatus == theItemStatus 
    select oi.OrderID; 

IQueryable<int> query2 = 
    from o in db.Orders 
    where o.OrderStatus == theOrderStatus 
    select o.OrderID; 

IQueryable<int> query3 = query1.Concat(query2).Distinct(); 

int result = query3.Count(); 
相關問題