会,因为时间列的值一般选择性较高(即重复值较少),这样查询优化器会先考虑用索引进行检索
除非索引碎片达到一定等级,查询优化器认为表扫描比索引查询快时就不用了
还有,纠正你一点小问题,结束时间不要加00:00:00,这样会将第二天的0点数据也包括在内
虽然概率很低,但情况存在
-------------------
你把列进行转换就用不到索引了,因为转换后的列值无论与数据页还是缓存上存储的都不一致
优化器需要重新扫描表并进行计算,所以一般对列进行函数操作再会慢
会的,如果你经常使用类似于
between '2012-08-08 00:00:00' and '2012-08-28 00:00:00'
这样的时间段查询的话,
最好把索引弄成聚簇索引.这样效率会更好一些.
正常情况下 如果你改成
A >='2012-08-08 00:00:00' and A<='2012-08-28 00:00:00'
理论上还会更快,这就涉及到了SQL的查询机制问题,和索引无关
会先拿出来该字段才会进行转换,这时已经用到索引了.
这个问题得识具体情况而定。
SQL Server 的查询优化器在选择索引时会考虑选择性。选择性高的时候,查询优化器会使用索引;否则,不会使用索引。
例如: 在这个表上有10W条记录,A值介于'2012-08-08 00:00:00' 和'2012-08-28 00:00:00' 之间的记录多达8W条,则查询优化器不会使用A字段上的索引。如果A值介于'2012-08-08 00:00:00' 和'2012-08-28 00:00:00' 之间的记录比较少(例如1000条),则会使用该索引。
A between '2012-08-08 00:00:00' and '2012-08-28 00:00:00'
这条语句等价于:A>=2012-08-08 00:00:00 and A<2012-08-28 00:00:00