【发布时间】:2014-01-28 03:06:36
【问题描述】:
这是我的桌子的构造
CREATE TABLE [dbo].[InterfaceMeraAdReport_CAV](
[ID] [int] IDENTITY(1,1) NOT NULL,
[reportID] [nvarchar](100) NOT NULL,
[FromTime] [nvarchar](100) NOT NULL,
[ToTime] [nvarchar](100) NOT NULL,
[Customer] [nvarchar](100) NOT NULL,
[Area] [nvarchar](100) NOT NULL,
[Vendor] [nvarchar](100) NOT NULL,
[SuccessCalls] [nvarchar](100) NOT NULL,
[TotalCalls] [nvarchar](100) NOT NULL,
[TotalMins] [nvarchar](100) NOT NULL,
[ASR] [nvarchar](100) NOT NULL,
[ACD] [nvarchar](100) NOT NULL,
[Fee] [nvarchar](100) NOT NULL,
[Cost] [nvarchar](100) NOT NULL,
[Profix] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_MeraAdvReport_CA] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
两个最常用的查询是这种形式: 一个
select Customer,vendor,SUM(cast(SuccessCalls as int)) as successCalls,
SUM(cast(TotalCalls as int)) as TotalCalls,
SUM(cast(TotalMins as decimal(18,2))) as TotalMins,
case when SUM(cast(TotalCalls as decimal(18,2))) = 0 then 0.0 else (SUM(cast(SuccessCalls as decimal(18,2))) / SUM(cast(TotalCalls as decimal(18,2)))) end as ASR,
case when SUM(cast(SuccessCalls as decimal(18,2))) = 0 then 0.0 else (SUM(cast(TotalMins as decimal(18,2))) / SUM(cast(SuccessCalls as decimal(18,2)))) end as ACD,
SUM(cast(Profix as decimal(18,2))) as profix
from InterfaceMeraAdReport_CAV
where FromTime >= '20140128020000' and ToTime <= '20140128030000'
and Customer= '01.2136' and Area in ('62817','62818','62819','62859','62877','62878','62879')
group by Customer,Vendor
两个
select Customer,SUM(cast(SuccessCalls as int)) as successCalls,
SUM(cast(TotalCalls as int)) as TotalCalls,
SUM(cast(TotalMins as decimal(18,2))) as TotalMins,
case when SUM(cast(TotalCalls as decimal(18,2))) = 0 then 0.0 else (SUM(cast(SuccessCalls as decimal(18,2))) / SUM(cast(TotalCalls as decimal(18,2)))) end as ASR,
case when SUM(cast(SuccessCalls as decimal(18,2))) = 0 then 0.0 else (SUM(cast(TotalMins as decimal(18,2))) / SUM(cast(SuccessCalls as decimal(18,2)))) end as ACD
from InterfaceMeraAdReport_CAV
where FromTime >= @timeFrom and ToTime <= @timeTo
and Customer= @customer and Area in ('62817','62818','62819','62859','62877','62878','62879')
group by Customer
这个表每天增加大约300000条记录,所以现在上面的查询变得越来越慢,
我想创建索引来提高速度,但我不知道最有效的方法,谁能告诉我哪些列是最好的索引列
【问题讨论】:
标签: sql-server performance indexing