sqlserver中索引优化
- 背景:
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
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。