2010-01-16 108 views
0

我正在尋找一些建議如何獲得索引對這個查詢運行的更好... 的SQL Server 2005/8一些客戶有5某些8 ...的SQL Server索引建議性能

SELECT sales.ChainStoreId, 
      sales.CashBoxId, 
      dbo.DateOnly2(sales.BonDate), 
      MAX(sales.BonDate), 
      SUM(sales.SumPrice) 
FROM  [BACK_CDM_CLEAN_BOLTEN].[dbo].[CashBoxSales] sales 
WHERE  sales.BonType in ('B','P','W')    
AND  Del = 0 
AND  sales.BonDate >= @minDate 
GROUP BY sales.ChainStoreId, 
      sales.CashBoxId, 
      dbo.DateOnly2(sales.BonDate) 

表如下所示

CREATE TABLE [dbo].[CashBoxSales](
    [SalesRowId] [int] IDENTITY(1,1) NOT NULL, 
    [ChainStoreId] [int] NOT NULL, 
    [CashBoxId] [int] NOT NULL, 
    [BonType] [char](1) NOT NULL, 
    [BonDate] [datetime] NOT NULL, 
    [BonNr] [nvarchar](20) NULL, 
    [SumPrice] [money] NOT NULL, 
    [Discount] [money] NOT NULL, 
    [EmployeeId] [int] NULL, 
    [DayOfValidity] [datetime] NOT NULL, 
    [ProcStatus] [int] NOT NULL, 
    [Del] [int] NOT NULL, 
    [InsertedDate] [datetime] NOT NULL, 
    [LastUpdate] [datetime] NOT NULL, 

什麼是索引列的正確排序,覆蓋或複合材料等 表有多達10萬行。還有其他類似的選擇,但我希望從建議得到這個速度(最重要的),我可以調整一些其他人。

非常感謝!

+0

我應該補充說Del列只有值0,1,而bontype有大約5個值。 Dateonly2函數返回給定日期時間的日期,我應該確定列索引(?)。我也知道關於分析器,分析器和DTA等。寧願有原則性的答案,基於邏輯比工具...乾杯 – alex 2010-01-16 14:13:56

+0

好吧,我有事情下降到不到2秒使用顧問和索引 CREATE NONCLUSTERED INDEX [ Alex_index_] ON [dbo]。[CashBoxSales] ( \t [BonType] ASC, \t [刪除] ASC, \t [BonDate] ASC, \t [ChainStoreId] ASC, \t [CashBoxId] ASC ) INCLUDE([SumPrice]) 現在誰可以向我解釋爲什麼這個事情是按照這個順序排序的,爲什麼del 2值Bontype 3值的索引有幫助...我理解bondate,並且理解include中的sumprice,不需要額外的查找,所有列需要在那裏,但..... – alex 2010-01-16 18:00:57

回答

2

當您在SQL Server Management Studio中進行查詢時,只需從上下文菜單中選擇「分析數據庫優化顧問中的查詢」,然後關閉!

alt text http://i50.tinypic.com/2ihrwc2.png

提醒你:這只是調整這一個單一的查詢孤立!在這裏添加索引以加快查詢速度可能會對應用程序的其他部分產生不利影響。索引總是伴隨開銷 - 插入和刪除通常會變慢。

此外,不要盲目實施DTA的所有建議 - 根據您自己的判斷來確定索引是否有意義。

最後:測量,測量,測量!在作爲基線進行任何更改之前測量您的表現,然後在做出更改並進行比較後再次進行測量。

+0

目前尋找一個很好的答案,因爲它導致了正確的答案...現在我需要明白爲什麼... – alex 2010-01-16 18:02:15

0

我最好的建議是通過SQL事件探查器運行此查詢。它會推薦一些索引供你試用。

另外,您可以嘗試設置分區表並使用其中一個GROUP BY列作爲分區鍵。

+0

是的,按日期分區是在計劃中... – alex 2010-01-16 18:03:54

0

把我的頭頂部我會

INDEX (BonType, Del, BonDate) 

甚至開始只是

INDEX (BonType, BonDate) 

我會建議使用指數分析儀,Proflier和標杆的各種組合。