关于两个Sql语句查询的区别(Sql server 2005)

minwen9704135 2011-03-28 01:49:24
大家讨论下下面的两种Sql语句在性能上有啥区别么?
Orders表(大约24个字段),只有一个聚集索引 OrderID,其他的没有建立索引
Select MAX(OrderDate) From Orders
Select MAX(OrderDate) From Orders where OrderDate>'2011-03-27'('2011-03-27'这个值为昨天零时的值)
表中大概有500万的数据,我执行下来2个Sql语句都是执行聚集索引扫描,但是IO基本一样,但是 SQL Server 执行时间两者相差较多,有点不明白?
请大家指点下。。。。。
...全文
152 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanzhouqi 2011-04-01
  • 打赏
  • 举报
回复
会过头来 想明白了
索引 是这样的,如果你的 覆盖值 太大的话,就会放弃使用索引 那个覆盖值大概是10%,使用索引扫描
minwen9704135 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bobofsj11 的回复:]

你用了max 函数 你那个索引没起作用啊
[/Quote]
那这2个查询本身有区别么?其实我问这个问题的本意在于讨论下这2个Sql查询的原理
bobofsj11 2011-03-31
  • 打赏
  • 举报
回复
你用了max 函数 你那个索引没起作用啊
minwen9704135 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 andy_liucj 的回复:]

占用时间时间不是差不多嘛
[/Quote]
呵呵 这个。。。。。
minwen9704135 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xiaoping04408 的回复:]

我觉得应该给 OrderDate 建个索引的。
[/Quote]

现在讨论的不是建不建索引的问题吧 ^_^
andy_liucj 2011-03-30
  • 打赏
  • 举报
回复
占用时间时间不是差不多嘛
qgqch2008 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 minwen9704135 的回复:]

没人能解释这个问题
看来CSDN人气还是不行啊
[/Quote]
--小F-- 2011-03-30
  • 打赏
  • 举报
回复
你这两条语句建立的索引和语句貌似没什么关系

所以运行时间取决于WHERE条件

xiaoping04408 2011-03-30
  • 打赏
  • 举报
回复
我觉得应该给 OrderDate 建个索引的。
minwen9704135 2011-03-30
  • 打赏
  • 举报
回复
没人能解释这个问题
看来CSDN人气还是不行啊
minwen9704135 2011-03-29
  • 打赏
  • 举报
回复
执行下面Sql语句(执行前清空缓存):
Select MAX(OrderDate) From Orders

(1 行受影响)
表 'Orders '。扫描计数 9,逻辑读取 69603 次,物理读取 270 次,预读 69804 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)

SQL Server 执行时间:
CPU 时间 = 1640 毫秒,占用时间 = 17083 毫秒。

执行下面Sql语句(执行前清空缓存):
Select MAX(OrderDate) From Orders where OrderDate>'2011-03-27'

表 'Orders '。扫描计数 9,逻辑读取 69603 次,物理读取 253 次,预读 69804 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)

SQL Server 执行时间:
CPU 时间 = 362 毫秒,占用时间 = 17998 毫秒。
fanzhouqi 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fanzhouqi 的回复:]

IO一样??
不太可能吧
能发个


SET STATISTICS IO on

的状态来看看
[/Quote]
除非你的数据已经存到了 内存中不然不可能一样的
fanzhouqi 2011-03-28
  • 打赏
  • 举报
回复
IO一样??
不太可能吧
能发个


SET STATISTICS IO on

的状态来看看
rucypli 2011-03-28
  • 打赏
  • 举报
回复
看执行计划
AcHerat 2011-03-28
  • 打赏
  • 举报
回复
如果数据量大,那么筛选数据还是要费一定的时间的。
minwen9704135 2011-03-28
  • 打赏
  • 举报
回复
2个Sql语句都是执行聚集索引扫描,区别就是在于一个加了where 一个没有where
AcHerat 2011-03-28
  • 打赏
  • 举报
回复
CRTL + L 看执行计划
快溜 2011-03-28
  • 打赏
  • 举报
回复
貌似第二条没有用到索引。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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