如何查看SqlServer查询语句的执行效率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查看SqlServer查询语句的执行效率相关的知识,希望对你有一定的参考价值。

使用语句查询SQL Server执行过的语句及执行效率

SELECT TOP 1000
ST.text AS \'执行的SQL语句\',
QS.execution_count AS \'执行次数\',
QS.total_elapsed_time AS \'耗时\',
QS.total_logical_reads AS \'逻辑读取次数\',
QS.total_logical_writes AS \'逻辑写入次数\',
QS.total_physical_reads AS \'物理读取次数\',
QS.creation_time AS \'执行时间\' ,
QS.*
FROM   sys.dm_exec_query_stats QS
CROSS APPLY 
sys.dm_exec_sql_text(QS.sql_handle) ST
--WHERE  QS.creation_time BETWEEN \'2015-08-01 00:00:00\' AND \'2015-09-02 11:00:00\' 
ORDER BY
QS.creation_time DESC
参考技术A SQL 语句摘要可以用在mysql的各个方面,比如 性能字典里对语句的分析,查询重写插件规则改写等等。
接下来依次看下语句摘要在这两方面的使用。
1. 性能字典
mysql> call sys.ps_setup_enable_consumer('statements');
+---------------------+
| summary |
+---------------------+
| Enabled 4 consumers |
+---------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
开启后,执行几次之前的几条 SQL。
完后可以很方便的从 sys 库里分析这类语句的执行情况,包括执行次数,执行时间,扫描的记录数,锁定的时间,是否用到排序等等。

2. 查询重写插件
比如要阻止对表 p1 通过字段 r1 的删除动作,可以用查询重写插件在 MySQL 语句分析层直接转换,这时候就得用到摘要函数 statement_digest_text。
假设:表 p1 字段 id 值全部为正。
delete from p1 where id = 1000;

要改写为,
delete from p1 where id = -1;

利用函数 statement_digest_text 来定制这条 SQL 的重写规则。
mysql> INSERT INTO query_rewrite.rewrite_rules (pattern, replacement,pattern_database) -> VALUES( -> statement_digest_text('delete from p1 where id = 1000') , -> statement_digest_text('delete from p1 where id = -1'), -> 'ytt' -> );Query OK, 1 row affected (0.01 sec)
语句被查询重写后的效果:
mysql> delete from p1 where id = 20000;Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show warnings\G*************************** 1. row *************************** Level: Note Code: 1105Message: Query 'delete from p1 where id = 20000' rewritten to 'DELETE FROM `p1` WHERE `id` = - 20000' by a query rewrite plugin1 row in set (0.00 sec)mysql> select count(*) from p1;+----------+| count(*) |+----------+| 9000001 |+----------+1 row in set (1.59 sec)
总结
MySQL 8.0 新增的语句摘要函数可以很方便的分析 SQL 语句执行的各个方面,比以前分析类似的场景要简单的多。

SQL执行效率和性能测试方法(SqlServer)

测试SQL性能:
一、通过设置STATISTICS查看执行SQL时的系统情况。选项:PROFILE、O 、TIME。
SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。
SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。
SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件。
实例如下:
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
SET STATISTICS TIME ON
GO
–SQL脚本开始
SELECT [TestCase] FROM [TestCaseSelect]
–SQL脚本结束
GO
SET STATISTICS PROFILE OFF
SET STATISTICS IO OFF
SET STATISTICS TIME OFF

另外,也可以通过手工添加语句,计算执行时间来查看执行语句花费的时间,以判断该条SQL语句的效率:
declare @d datetime
set @d=getdate()
–SQL脚本开始
SELECT [TestCase] FROM [TestCaseSelect]
–SQL脚本结束
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

二、通过SQL 2008的“查询”按钮下的“包括实际的执行计划”和“包括客户端统计信息”。

注:大表跟小表进行关联查时,涉及到嵌套查询,先查询小表,然后再联合大表。

以上是关于如何查看SqlServer查询语句的执行效率的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

sql server中如何查看执行效率不高的语句

[SQL] sql server中如何查看执行效率不高的语句

如何查看Oracle中sql语句的执行时间

MySQL中如何查看“慢查询”,如何分析执行SQL的效率?

如何查看SQL Server2000执行过的SQL语句