日期:2014-05-17  浏览次数:20523 次

创建索引中的INCLUDE


采用执行计划执行以下语句:

select SUM(交易积分) as monthsum, sum(case when DAY(交易时间)=DAY(GETDATE()) then 交易积分 else 0 end )  as daysum
from 积分交易表 tm where tm.交易时间>=left(convert(varchar(20),getdate(),120),7)+'-01'

--查询目的为是统计当月、当天的积分交易额


执行计划工具建议创建索引:

CREATE NONCLUSTERED INDEX [ddss]
ON [dbo].[积分交易表] ([交易时间])
INCLUDE ([交易积分])


如建立该索引后,系统在该表是建立了如下的索引数据吗?

交易时间                交易积分
2013-12-01 12:13:00      -100
2013-12-01 12:13:01      -200


如果真是按上面建立索引数据,由于交易时间绝大多是不相同的,那相当于数据几乎是重复存储一遍了?







------解决方案--------------------
引用:
在积分交易表有必要创建如下两个索引吗?

CREATE NONCLUSTERED INDEX [ddss]
ON [dbo].[积分交易表] ([交易时间])
INCLUDE ([交易积分])
--针对当月、当天交易统计

CREATE NONCLUSTERED INDEX [aass]
ON [dbo].[积分交易表] ([交易时间])
INCLUDE ([交易积分],[积分主账号])
--针对某个积分主账号的当月、当天交易统计


没必要的,建1个就可以,把第二个修改一下:

CREATE NONCLUSTERED INDEX [aass]
ON [dbo].[积分交易表] ([交易时间],[积分主账号])
INCLUDE ([交易积分])
------解决方案--------------------
引用:
在积分交易表有必要创建如下两个索引吗?

CREATE NONCLUSTERED INDEX [ddss]
ON [dbo].[积分交易表] ([交易时间])
INCLUDE ([交易积分])
--针对当月、当天交易统计

CREATE NONCLUSTERED INDEX [aass]
ON [dbo].[积分交易表] ([交易时间])
INCLUDE ([交易积分],[积分主账号])
--针对某个积分主账号的当月、当天交易统计
没必要,用第二个就可以了