SQL语言sql exec 返回值问题。

利用 sys.dm_exec_query_stats 查找并优化SQL语句
今天在看Sql Server 2012的新特性,当看到某一条时,居然发现了 sys.dm_exec_query_stats系统视图进行了升级;又由于该试图一直在用,并且相当的有用,可以说是查找并优化Sql 语句的一大利器。所以,今天特做下记录。
sys.dm_exec_query_stats视图的定义:返回 SQL Server 2012中缓存查询计划的聚合性能统计信息。缓存计划中的每个查询语句在该视图中对应一行,并且行的生存期与计划本身相关联。在从缓存删除计划时,也将从该视图中删除对应行。
其实说白了,该视图存放的就是当前所有执行计划的详细信息,比如某条执行计划共占CPU多少等等。因为该视图对编译次数、占用CPU资源总量、执行次数等都进行了详细的记录,所以,可以说是优化DB服务器CPU 的一大利器。
由于该试图是动态的,所以并一定总是准确,也可能某条执行计划在查询的时间做了重编译,得到了偏差的信息等;另外,对于 sys.dm_exec_query_stats中占用资源最多的,并不一定是有性能问题的,要同时观察执行次数 和 IO读写等,而对于执行过于频繁的,则要考虑在程序中加缓存了;该系统试图不能用作应急优化用,但是日常优化,一定要做一个重要的参考指标。
说了这么久,下面放 优化的SQL :
SELECT s2.dbid,
(SELECT TOP 1SUBSTRING(s2.text,statement_start_offset/ 2+1 ,
((CASE WHEN statement_end_offset= -1
THEN (LEN(CONVERT(nvarchar(max),s2.text))* 2)
ELSE statement_end_offsetEND) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_statsAS s1
CROSS APPLYsys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectidis null
ORDER BY s1.total_worker_timedesc
具体列的含义,请参考文末。
接下来说下 Sql Server 2012对
sys.dm_exec_query_stats 试图的增强功能吧:添加了四列,以帮助排除长时间运行的查询所存在的问题。可以使用total_rows、min_rows、max_rows 和 last_rows聚合行计数列,分隔那些从出现问题的查询(可能缺少索引或查询计划出错)中返回大量行的查询。
具体意思,从名称中就不难看出来;经过本人的试用之后,却发现这个改进对于某些执行计划并不是很实用,为什么呢,因为执行计划是可能接受参数的,所以行数的数量和参数密切相关,所以,对于返回行数和参数密切相关的执行计划,这个改进没有什么用,反之,还是有一定参考作用的。
sys.dm_exec_query_stats的详细说明:/zh-cn/library/ms(v=sql.110).aspx
原文地址:/xunziji/archive//.html
利用 sys.dm_exec_query_stats 查找并优化SQL语句由用户自行发布,利用 sys.dm_exec_query_stats 查找并优化SQL语句内容不代表本站立场,请自行分辨真伪。PHP+MySQL数据库教程 列表
相关参考课程PHP PDO-&exec() 执行无返回结果集的 SQL 语句
PDO-&exec() 方法主要是针对没有结果集合返回的操作,比如 INSERT、UPDATE、DELETE 等操作,它返回的结果是当前操作影响的列数。
PDO-&exec( string statement )
PDO Insert
//构造PDO连接
$dbh = &mysql:host=dbname=test&;
$db = new PDO($dbh, 'root', 'root123');
$db-&query(&set character set 'gbk'&);
//写入数据
$password = md5(&123456&);
$regdate = time();
$sql = &INSERT INTO user (username,password,email,regdate)VALUES('小陈','$password','',
$regdate)&;
$count = $db-&exec($sql);
echo '写入 ',$count,' 条数据记录!';
执行该例子,浏览器输出:
写入 1 条数据记录!
PDO Update
//构造PDO连接
$dbh = &mysql:host=dbname=test&;
$db = new PDO($dbh, 'root', 'root123');
$db-&query(&set character set 'gbk'&);
//更新数据
$sql = &UPDATE user SET email='' WHERE username='小陈'&;
$count = $db-&exec($sql);
echo '更新 ',$count,' 条数据记录!';
PDO Delete
//构造PDO连接
$dbh = "mysql:host=dbname=test";
$db = new PDO($dbh, 'root', 'root123');
$db-&query("set character set 'gbk'");
//删除数据
$sql = "DELETE FROM user WHERE username = '小陈'";
$count = $db-&exec($sql);
echo '删除 ',$count,' 条数据记录!';
?&本章节内容共分 4 部分:1.
PHP PDO-&exec() 执行无返回结果集的 SQL 语句4.
没有了<(我爱开发网) — 提供最好的 、、、 及sql语句中的exec用法
[问题点数:40分,结帖人huangweijeff]
sql语句中的exec用法
[问题点数:40分,结帖人huangweijeff]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年7月 荣获微软MVP称号
2010年2月 MS-SQL Server大版内专家分月排行榜第一2009年5月 MS-SQL Server大版内专家分月排行榜第一
2010年5月 总版技术专家分月排行榜第二2010年4月 总版技术专家分月排行榜第二
2011年7月 荣获微软MVP称号2010年7月 荣获微软MVP称号
2012年7月 荣获微软MVP称号
2010年2月 MS-SQL Server大版内专家分月排行榜第一2009年5月 MS-SQL Server大版内专家分月排行榜第一
2010年7月 总版技术专家分月排行榜第二2010年6月 总版技术专家分月排行榜第二
2010年5月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。EXEC SQL_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||文档简介
&&嵌&#8203;入&#8203;S&#8203;Q&#8203;L&#8203; &#8203;动&#8203;态&#8203;S&#8203;Q&#8203;L
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢Open和ExecSQL方法的区别
Open和ExecSQL方法的区别
0:21:00来源:
Delphi的Query控件使用?Delphi的Query控件第一点是:区分好Query控件的Open方法和ExecSQL方法。这两个方法都可以实现执行SQL语句,但要根据不同情况分别使用。如果这条SQL语句将返回一个结果集,必须使用Open方法,如果不返回一个结果集,则要使用ExecSQL方法。例如: …… Query1:Tquery Query2:Tquery …… Query1.C Query1.SQL.C Query1.SQL.Add('select * from AA'); Query1.O …… Query2.C Query2.SQL.C Query2.SQL.Add('delete AA'); Query2.ExecSQL; …… 上述的例子中,Query1所执行的SQL语句将返回一个结果集,因此必须用Open方法;而Query2所执行的是一条删除表记录语句,不返回结果集,因此用ExecSQL方法。 第二点是:如果Query控件用Open方法执行SQL语句,并且所用的SQL语句访问的是一张或几张频繁使用的表,在执行完SQL语句后,一定要调用SQL的FetchAll方法,能大大地减少死锁发生的概率。例如: …… Query1:Tquery …… Query1.C Query1.SQL.C Query1.SQL.Add('select * from AA'); Query1.O Query1.FetchA ……在 上述的例子中,如果AA是一张被频繁访问的表,在对这个表执行这一条select语句的同时,如果恰好有其他人对这张表执行删除或更新操作,便有可能发生 死锁。Query1.FetchAll这条语句实现的功能是释放加在表AA上的锁,这样死锁的发生概率可以大大减少。避免死锁,对我们将来进行大型数据库 开发尤为重要大家对 一条SQL 语句什么时候open 什么时候ExecSQL都总结 了 什么规律没?----------------------------------------------------------------------带了select的 不一定是open但带了INSERT UPDATE DELETE CREATE的时候 就是 ExecSQL----------------------------------------------------------------------------?1、对于所有返回数据集的查询都应该使用.Open,不返回数据集的使用 ?2、对于存储过程,返回数据集(游标)的使用Open,否则使用ExecProc;-----------------------------------------------------------------------------用select时,用open
用insert,delete,update时,用execsql.这句的第一句 不太准确!但多数时候用select时,用open
sql存储过程,计算两个自定义日期相差的天数
SQL2008评估期已到,测试版升级步骤
sql server禁用约束(FK、CK)和触发器

我要回帖

更多关于 backup exec 语言 的文章

 

随机推荐