sqlserver中索引优化
2015-09-18 09:10
375 查看
背景:
MRO表中TimeStamp nvarchar(32),但实际上它存储的内容是日期(2015-09-09 11:20:30)。
现在我要执行这样一个sql语句:
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这样的时间格式。
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这样的时间格式。
相关文章推荐
- 数据库中间件Mycat诞生记1
- sql server中的outer apply ,across apply 对应 oracle
- 自己写的数据库工具类
- [心得记录] MongoDB+nodejs(mac 环境)
- Mysql基础知识点汇总
- 数据库的增删
- mac上简单使用redis
- 数据库学习相关常用语句
- 使用MySQL命令行备份及恢复数据库
- andriod之从Sqlite中获取数据的三种方法SimpleAdapter,SimpCursorAdapter,CursorAdapter
- mysql复习笔记
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- 对于Oracle中分页排序查询语句执行效率的比较分析
- mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database
- 土地利用数据库地图自动缩编软件--地图缩编
- Mysql基础知识点汇总
- 不用安装oracle连接远程oracle数据库
- mysql一个连续日期(天)次数的统计
- mysql数据迁移到mongoDB中,如何操作?
- sql语句基础