我正在寻找一些建议如何获得索引对这个查询运行的更好... 的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万行。还有其他类似的选择,但我希望从建议得到这个速度(最重要的),我可以调整一些其他人。
非常感谢!
我应该补充说Del列只有值0,1,而bontype有大约5个值。 Dateonly2函数返回给定日期时间的日期,我应该确定列索引(?)。我也知道关于分析器,分析器和DTA等。宁愿有原则性的答案,基于逻辑比工具...干杯 – alex 2010-01-16 14:13:56
好吧,我有事情下降到不到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