积极答复者
请教一个查询优化的问题,谢谢!

问题
-
有个查询看到表扫描和逻辑读取很多,我想改造一下,但是改造后表扫描和逻辑读取减少很多,但是为啥CPU用时为啥却多了,不理解。
详细情况如下,我描述详细点,比较长。
表的基本情况:
name rows reserved data index_size unused
tbA 32419302 10279424 KB 8367104 KB 1893768 KB 18552 KBindex_name index_description index_keys
cw_ix_id nonclustered id
IX_FG_1 clustered 时间, id
时间_colBINCLUDEcola nonclustered 时间, colB
时间INCLUDEidcolAcolB nonclustered时间原始查询
select a.id,
CASE WHEN sum(colB) = 0 THEN 0
else sum(colA)/sum(colB) END as aaa
FROM tbA a
where 时间 between @早8点 and @早10点 or 时间 between @晚8点 and @@晚10点
group by a.id
返回的消息如下:(22777 行受影响)
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'tbA'。扫描计数 366,逻辑读取 1130 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。(14 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 187 毫秒,占用时间 = 383 毫秒。修改后的查询:
select a.id,
CASE WHEN sum(colB) = 0 THEN 0
else sum(colA)/sum(colB) END as aaa
from
(
select id,
colA,colB
FROM tbA
where 时间 between @早8点 and @早10点
Union all
select id,
colA,colB
FROM tbA
where 时间 between @晚8点 and @@晚10点
) a
group by a.id返回的消息如下:
(22777 行受影响)
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'tbA'。扫描计数 2,逻辑读取 346 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。(7 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 235 毫秒,占用时间 = 609 毫秒。为啥表扫描和逻辑读取减少很多,但是为啥CPU用时为啥却多了?
数据库为SQLServer2008withSP2
答案
-
"为啥表扫描和逻辑读取减少很多,但是为啥CPU用时为啥却多了?"
这很正常,简单的说,CPU跟logical io没有必然的联系。logical io也是个比较差的性能度量。QO的COST也不是基于logical io的。
Please click the Mark as Answer button if a post solves your problem!
- 已编辑 Michael CS 2012年12月7日 8:44
- 已建议为答案 Amy PengMicrosoft employee, Moderator 2012年12月11日 6:38
- 已标记为答案 Amy PengMicrosoft employee, Moderator 2012年12月17日 2:23
-
You should compare plan and look at overall query response.
- 已建议为答案 Amy PengMicrosoft employee, Moderator 2012年12月11日 6:38
- 已标记为答案 Amy PengMicrosoft employee, Moderator 2012年12月17日 2:24
全部回复
-
"为啥表扫描和逻辑读取减少很多,但是为啥CPU用时为啥却多了?"
这很正常,简单的说,CPU跟logical io没有必然的联系。logical io也是个比较差的性能度量。QO的COST也不是基于logical io的。
Please click the Mark as Answer button if a post solves your problem!
- 已编辑 Michael CS 2012年12月7日 8:44
- 已建议为答案 Amy PengMicrosoft employee, Moderator 2012年12月11日 6:38
- 已标记为答案 Amy PengMicrosoft employee, Moderator 2012年12月17日 2:23
-
You should compare plan and look at overall query response.
- 已建议为答案 Amy PengMicrosoft employee, Moderator 2012年12月11日 6:38
- 已标记为答案 Amy PengMicrosoft employee, Moderator 2012年12月17日 2:24