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

如何建立有效的索引?
HisTAAmountLog201306:该表ID为自增,作为主键
SELECT t1.isValid, t1.MID,t1.ExecuteDate, t1.ExecuteType,    
t1.Amount, t1.RelationMID,t1.RelationTicket, t1.Balance,    
t1.Remark, t1.LoginID,t1.UID, OperatorInfo.LoginID AS OperatorName,    
t1.OperatorID, t1.TradeDate,t1.TradeStartDate, t1.TradeEndDate,    
t1.Id, dbo.Customer.CustomerName    
FROM HisTAAmountLog201306  as t1 INNER JOIN    
dbo.Customer AS OperatorInfo ON    
t1.OperatorID = OperatorInfo.UID INNER JOIN    
dbo.Customer ON t1.UID = dbo.Customer.UID 
INNER JOIN  taprop t2  ON t1.MID=t2.MID     
WHERE ( OperatorInfo.customertype = '1' or  Customer.CustomerType='1')
and TradeDate >= '2013-06-04'   and TradeDate <= '2013-06-04'   
order by  Mid, ID

然后通过数据库引擎优化顾问,提示以下信息


请问下,HisTAAmountLog201306,该表我要怎么建索引才是更有效?我对这样的分析图不是很明白,能不能帮我分析下,万分感谢!
索引 执行计划 优化顾问

------解决方案--------------------
你先试试建这个索引,不管重复不重复,建了后,看看查询能不能更快:


create index idx_HisTAAmountLog201306_c1 
on HisTAAmountLog201306(TradeDate,MID,OperatorID,UID)

------解决方案--------------------
引用:
Quote: 引用:

你先试试建这个索引,不管重复不重复,建了后,看看查询能不能更快:


create index idx_HisTAAmountLog201306_c1 
on HisTAAmountLog201306(TradeDate,MID,OperatorID,UID)

如果我按照以上建立索引,执行计划如下:


如果按照优化顾问的建议,建立以下索引:
CREATE NONCLUSTERED INDEX [idx_HisTAAmountLog201306_c2] ON [dbo].[HisTAAmountLog201306]
(
[TradeDate] ASC,
[UID] ASC,
[OperatorID] ASC,
[MID] ASC,
[Id] ASC
)
INCLUDE (  [isValid],[ExecuteDate],[ExecuteType],[Amount],[RelationMID],[RelationTicket],[Balance],[Remark],[LoginID],[TradeStartDate],[TradeEndDate]) 
WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
执行计划如下: