sqlserver中索引优化

本文探讨了针对包含大量数据记录(MRO表3亿条记录,MRO_LteCell表7亿条记录)的SQL查询进行优化的方法。特别讨论了如何通过添加索引来减少查询时间,并对比了nvarchar与DateTime类型的优劣。
  • 背景:

MRO表中TimeStamp nvarchar(32),但实际上它存储的内容是日期(2015-09-09 11:20:30)。

现在我要执行这样一个sql语句:

Select t10.* from Tuning.MRO as T10 inner join Tuning.MRO_LteCell as T11 on T10.OID=T11.MROOID
Where T10.ObjectID=@ObjectID
   and T10.UEID=@UEID
   and (T10.TimeStamp>@BeginTime and T10.TimeStamp<@EndTime);

Tuning.MRO有3亿条记录

Tuning.MRO_LteCell有7亿记录

这时上边的sql语句执行时间是3分钟多,这时Tuning.MRO.TimeStamp是没有索引的。

  • 请问,这对整个情况,有什么好的优化方法?

1,)如果添加上Tuning.mro.TimeStamp的索引,是否和把TimeStamp类型改为DateTime类型具有一样的效果。

  • DBA给的回答

  从索引的角度来说,要少而精。

     从你的sql角度来看。如果MRO的objectid能够定位返回的行数更少,而且使用频繁。可以在objectid上建立索引。 同理,也可以在ueid、timestamp上建立索引。

     关键看哪个字段使用更频繁,返回行数更少。

    一般来说如果是时间字段。建议使用datetime。

     1.占用字节更少,8位

     2.更兼容一些。比如如果输入的‘20150909’ 这样。SqlServer可以自动改变成2015-09-09这样的时间格式。

 

 关于sql优化:http://www.cnblogs.com/wy123/category/834336.html

转载于:https://www.cnblogs.com/yy3b2007com/p/4818219.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值