日期:2014-05-19  浏览次数:20530 次

Sql server 2000/2005 有自带的性能分析工具吗?测试两个SQL语句的性能 谢谢!
我想测试以下两个Sql语句的性能,SQL本身有什么工具吗?

事件探查器 也就是profiler   里的   trace   可以根据一个语句的执行时间.发现前者要快些,但不知道数据量大的时候是哪个快,所以需要个工具.


--嵌套
select   a.OS_EFFORT_FORM_id,b.effort_date
from   OS_EFFORT_FORM   as   a   inner   join  
(select   os_effort_form_id,max(effort_date)   as   effort_date  
from   OS_EFFORT_FORM_DETAIL  
group   by   os_effort_form_id   )   as   b     on   a.os_effort_form_id=b.os_effort_form_id  

--内联接
select   a.OS_EFFORT_FORM_id,b.effort_date
from   OS_EFFORT_FORM   as   a   inner   join  
OS_EFFORT_FORM_DETAIL     as   b
  on   a.os_effort_form_id=b.os_effort_form_id  
where   not   exists(
select   1   from   OS_EFFORT_FORM_DETAIL   where   os_effort_form_id   =   b.os_effort_form_id     and   effort_date   > b.effort_date
)



------解决方案--------------------
n那就前一个快,我顶
------解决方案--------------------
查看“执行计划”啊,为什么快,为什么慢,怎么解决,都可以分析出来。当然了,这是需要背景知识和实践经验的。

另外,Quest公司有专门的性能调优解决方案和软件产品,感觉是属于比较傻瓜化的那种。

------解决方案--------------------
CTRL+L
------解决方案--------------------
数据量大的时候是哪个快
-----------------------------


这个是压力测试了, sql 没有提供有压力测试的工具
------解决方案--------------------
我觉得第一种方法快

--内联接
select a.OS_EFFORT_FORM_id,b.effort_date
from OS_EFFORT_FORM as a inner join
OS_EFFORT_FORM_DETAIL as b
on a.os_effort_form_id=b.os_effort_form_id
where not exists(
select TOP 1 --此处最好加上TOP 1
1 from OS_EFFORT_FORM_DETAIL where os_effort_form_id = b.os_effort_form_id and effort_date > b.effort_date
)