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 ? ? 为什么会出现这么大的差距离 ? 当在索引字段上使用了各种函数后,实际的选择过程便由 “索引查找”,变成了“索引扫描”了。会遍历所有的行的索引项,使执行过程变慢 ? 而使用直接比较的方法 则充份利用了索引的优势 ? 不知是否为正解,欢迎大家讨论 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |