微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver2005 中的 year() month() 与索引之间的关系

目前做的系统数据量比较大,出现了速度慢的问题

逐步分析发现了几个问题,拿出来与大家讨论一下

 

 

表1 有如下字段

ppid  int--厂名

indicatorsid  int--指标名

 datatime datetime 日期

datavalue      float 值

这个表表示某个厂某个时间某个指标的值

 

主键为  ppid,indicatorsid,datatime 联合主键

索引建立在 datatime 上

实验1

 

使用

 select count(*) from 表1

 where year(datatime)=2010 and month(datatime)>=8 and month(datatime)<=8

用时 18ms

 

使用

 select count(*) from 表1

 where datatime>='2010-8-1' and datatime<='2010-8-31'

用时 2ms

 

 

为什么会出现这么大的差距离

 

当在索引字段上使用了各种函数后,实际的选择过程便由 “索引查找”,变成了“索引扫描”了。会遍历所有的行的索引项,使执行过程变慢

 

而使用直接比较的方法 则充份利用了索引的优势

 

不知是否为正解,欢迎大家讨论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐