从同一个表select ,记录少的为什么反而比记录多的慢?where 条件相同,只是范围大小有区别

心念不空过 2006-01-05 03:04:04
select * from test8
where tdate>'20000701' and tdate<='20040502'

select * from test8
where tdate>'19980701' and tdate<='20040502'

第二个查询反而快!(百万数量级条记录)
表test8在tdate上建了索引
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsqkeke 2006-01-05
  • 打赏
  • 举报
回复
呵呵 :)
javanow 2006-01-05
  • 打赏
  • 举报
回复
分别选中这2条sql语句,看看执行计划
可能的情况
1:你先执行第一条,数据读内存了,然后执行第二条语句,因为大部分数据在内在中,因此反而更快。此时你执行第一条,肯定会快过第二条。

2:某些情况下全表扫描确实比索引扫描更快。


------------------------
http://chinadba.cn
深圳骄子数据库服务网
最专业的数据库优化、管理、设计、培训网
diepig925 2006-01-05
  • 打赏
  • 举报
回复
我想是你的索引有问题了,建议你重建索引.
DBCC DBREINDEX(test8)可能会得到你要的效果!
zlp321002 2006-01-05
  • 打赏
  • 举报
回复
--你的字段要建聚集索引。
lw1a2 2006-01-05
  • 打赏
  • 举报
回复
什么类型的索引?
zlp321002 2006-01-05
  • 打赏
  • 举报
回复
--建普通索引
create index 索引名称 on 表名(字段)
--建聚集索引
create clustered index 索引名称 on 表名(字段)
--建非聚集索引
create NONCLUSTERED index 索引名称 on 表名(字段)


select * from test8(index =索引名)
where tdate>'20000701' and tdate<='20040502'

select * from test8(index =索引名)
where tdate>'19980701' and tdate<='20040502'


--然后比较下速度情况。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧