如何测试sql语句性能,提高执行效率

有时候我们经常为我们的sql语句执行效率低下发愁,反复优化后,可还是得不到提高

那么你就用这条语句找出你sql到底是在哪里慢了

示例:

SET STATISTICS io
ON
        SET STATISTICS time
ON
       
go
        
---你要测试的sql语句
         select top 100
* from TBL_Cot_RecStaticList
       
go
        SET STATISTICS profile
OFF
        SET STATISTICS io
OFF
        SET STATISTICS time OFF

显示信息:

SQL Server 分析和编译时间:

CPU 时间 = 0 毫秒,占用时间 = 59 毫秒。

(100 行受影响)
        表 ‘TBL_Cot_RecStaticList‘。扫描计数 1,逻辑读取
14 次,物理读取 2 次,预读 992 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
           CPU 时间 = 0 毫秒,占用时间
= 306 毫秒。

SQL Server 分析和编译时间:
           CPU 时间 = 0 毫秒,占用时间
= 1 毫秒。

SQL Server 执行时间:
           CPU 时间 = 0 毫秒,占用时间
= 1 毫秒。

SQL Server 执行时间:
           CPU 时间 = 0 毫秒,占用时间
= 1 毫秒。

转发原文:http://www.cnblogs.com/lynnlin/archive/2008/06/18/1224376.html

为了让您的程序执行的效率更高,SQL的效率一定不可忽视。

现有以下方法去检测SQL的执行效率。

对于多表查询的效率测试:

1)直接from
,where方式。

SET STATISTICS io ON
        SET
STATISTICS time ON
        go
 
---你要测试的sql语句
select
g.grpName,t.grpID,t.flowID,t.typeName,t.description
from
hyGroup g  ,hyType t where  t.grpID =
g.flowID      

        

       
go
        SET STATISTICS profile
OFF
        SET STATISTICS io
OFF
        SET STATISTICS time OFF

SQL Server 分析和编译时间:

   CPU 时间 = 4 毫秒,占用时间 = 4 毫秒。

(8 行受影响)

‘hyType‘。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0
次。
表 ‘hyGroup‘。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob
预读 0 次。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

2)inner join
方式:

SET STATISTICS io
ON
        SET STATISTICS time
ON
        go
 
---你要测试的sql语句
select
g.grpName,t.grpID,t.flowID,t.typeName,t.description
from
hyGroup g  inner join hyType t on   t.grpID =
g.flowID      

        

       
go
        SET STATISTICS profile
OFF
        SET STATISTICS io
OFF
        SET STATISTICS time OFF

SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

(8 行受影响)

‘hyType‘。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0
次。
表 ‘hyGroup‘。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob
预读 0 次。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

3)left join 方式

SET
STATISTICS io ON
        SET STATISTICS
time ON
        go
 
---你要测试的sql语句
select
g.grpName,t.grpID,t.flowID,t.typeName,t.description
from
hyGroup g  left join hyType t on   t.grpID =
g.flowID      

        

       
go
        SET STATISTICS profile
OFF
        SET STATISTICS io
OFF
        SET STATISTICS time OFF

SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 3 毫秒。

(10 行受影响)

‘hyType‘。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0
次。
表 ‘hyGroup‘。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob
预读 0 次。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

4)right join 方式

SET
STATISTICS io ON
        SET STATISTICS
time ON
        go
 
---你要测试的sql语句
select
g.grpName,t.grpID,t.flowID,t.typeName,t.description
from
hyGroup g  right join hyType t on   t.grpID =
g.flowID      

        

       
go
        SET STATISTICS profile
OFF
        SET STATISTICS io
OFF
        SET STATISTICS time OFF

SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 3 毫秒。

(8 行受影响)

‘hyGroup‘。扫描计数 1,逻辑读取 8 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0
次。
表 ‘hyType‘。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob
预读 0 次。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 分析和编译时间:

   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server
执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL
Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

如何测试sql语句性能,提高执行效率,布布扣,bubuko.com

时间: 2024-12-21 22:09:28

如何测试sql语句性能,提高执行效率的相关文章

查看SQL语句执行时间与测试SQL语句性能

查看SQL语句执行时间与测试SQL语句性能 写程序的人,往往需要分析所写的SQL语句是否够优化.是否能提升执行效率,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下: SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以毫秒为单位). SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数

查看sql语句执行时间/测试sql语句性能

写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下: SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以毫秒为单位). SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数.逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁

loadrunner测试sql语句性能

最初的想法是是想通过录制在SQL Server2008的操作来着的,无奈试了即便都录不到查询的sql语句,网上查资料全是关于SQL 2000的(这部分有经验的欢迎指教). 于是只能通过直接调用loadrunner本身的function来实现sql语句的性能测试.主要用到的是lr_db_connect和lr_db_executeSQLStatement两个函数,具体的用法这里不做解释,请自行查看loadrunner的帮助说明. 下面进入正题.在函数lr_db_connect的帮助说明中有句“Imp

SQL: 查看语句执行时间--测试sql语句性能

SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以毫秒为单位). SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数.逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息. SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件. 使用方法:打开SQL SERVER 查询分析器,输入以下语句: set statistics profile on set statist

SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过拆分SQL来优化的博文,最近刚好遇到一个实际案例,比较有代表性,现分享出来, 我们来通过一个案例来分析,为什么拆分语句可以提高SQL执行效率,更重要的是弄清楚,拆分前为什么慢,拆分后为什么快了? 幼稚的话,各位看官莫笑 先看一下相关表的数据量,大表也有5900多万,小表有160多万 (声明:我从来没

数据库之测试sql语句效率

在写sql语句的时候发现,对于想要的结果通常有好多中实现方法.当面对这些实现方法的时候要如何选择才是相对来说最优的呢?这就引出了这篇博客的主题,如何测试sql语句的效率 下面介绍几种sql语句测试效率的方法,大多数是从网上查找的,然后再一一测试了一下.最后我自己做了一个重新的整理. 1. 测试sql语句执行时间的方法,获得查询前后时间差 declare @begin_date datetime declare @end_date datetime select @begin_date = get

优化临时表使用,SQL语句性能提升100倍

[问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右.SQL语句如下:SELECT DISTINCT g.*, cp.name AS cp_name, c.name AS category_name, t.name AS type_name FROMgm_game g LEFT JOIN gm_cp cp ON cp.id = g.cp_id AND cp.deleted = 0 LEFT JOIN gm_cate

SQL语句性能优化--LECCO SQL Expert

SQL语句的优化是将性能低下的SQL语句转换成目的相同的性能优异的SQL语句. 人工智能自动SQL优化就是使用人工智能技术,自动对SQL语句进行重写,从而找到性能最好的等效SQL语句. 数据库性能的优化   一个数据库系统的生命周期可以分成:设计.开发和成品三个阶段.在设计阶段进行数据库性能优化的成本最低,收益最大.在成品阶段进行数据库性能优化的成本最高,收益最小. 数据库的优化通常可以通过对网络.硬件.操作系统.数据库参数和应用程序的优化来进行.最常见的优化手段就是对硬件的升级.根据统计,对网

数据库SQL语句性能优化

选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. WHERE子句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WH