我正在寻找一些有关如何在此查询中更好地运行索引的建议... SQL Server 2005/8一些客户有5个8 ...
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 :(得分:2)
在SQL Server Management Studio中查询时,只需从上下文菜单中选择“在数据库调优顾问中分析查询”,然后关闭即可!
alt text http://i50.tinypic.com/2ihrwc2.png
请注意:这只是单独调整这一个查询!在此处添加索引以加快此查询速度可能会对应用程序的其他部分产生负面影响。索引始终带有开销 - 插入和删除往往较慢。
此外,不要盲目地实施DTA的所有建议 - 使用您自己的判断来判断指数是否有意义。
最后:衡量,衡量,衡量!在任何更改之前测量您的性能作为基线,然后在进行更改并进行比较后反复测量。
答案 1 :(得分:0)
我最好的建议是通过SQL事件探查器运行此查询。它会为你推荐一些索引。
此外,您可以尝试设置分区表并使用GROUP BY列之一作为分区键。
答案 2 :(得分:0)
脱离我的头脑我会从
开始INDEX (BonType, Del, BonDate)
甚至只是
INDEX (BonType, BonDate)
我建议使用Index Analyzer,Proflier和Benchmarking各种组合。