当前位置: 数据库>sqlserver
SQL参数化查询的另一个理由 命中执行计划
来源: 互联网 发布时间:2014-10-08
本文导语: 1概述 SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL是需要通过编译器解释才能运行的(在这之间还要做SQL的优化)。而这些步骤都是需要...
1概述
SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL是需要通过编译器解释才能运行的(在这之间还要做SQL的优化)。而这些步骤都是需要运行成本,所以在数据库中有一个叫做执行计划的东西,编译器会将编译过后的SQL存入执行计划当中,当遇到同样的SQL时,就直接调用执行计划来执行,而不需要再次编译。
通过对上面执行计划的认识,为了提高数据库运行的效率,我们需要尽可能的命中执行计划,这样就可以节省运行时间。
2相关SQL
2.1查看当前数据库中所有的执行计划:
SELECT cp.usecounts AS '使用次数'
,objtype AS '类型'
,st.[text] AS 'SQL文本'
,plan_handle AS '计划句柄'
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text not like '%sys%'
2.2删除执行计划
--删除所有计划
DBCC FREEPROCCACHE
2.3测试脚本(创建员工表,并向其插入1000条数据)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]'))
DROP TABLE [dbo].Employee
GO
--人员表
CREATE TABLE dbo.Employee
(
id int,
name nvarchar(50)
);
--插入测试数据
DECLARE @I INT=0,@ENDI INT=1000;
WHILE(@I
SQL Server统计SQL语句执行时间的脚本
怎么写一个Shell来执行这样的功能,访问Oracle数据库,然后执行一个SQL脚本,生成一个文件。急!
SQL Server 中查看SQL句子执行所用的时间
oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
循环里面执行sql插入语句只执行第一个插入,为什么??
如何处理此错误:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有执行可选特性
sql无效字符引起的执行sql语句报错的解决方法
C#代码验证sql语句是否正确(只验证不执行sql)的方法
为什么 java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有执行可选特性
sql无效字符 执行sql语句报错解决方案
如何判断一条sql(update,delete)语句是否执行成功
Java的SQL语句执行错误问题
请问如何在Java中执行SQL的块语句?
当ResultSet执行SQL成功后,我如何取得ResultSet的记录部条数
了解 sql server 语句的执行时间
oracle sql执行过程(流程图)
jsp中sql语句执行时间太长,用浏览器打开时,页面超时,如何处理?
~~进门就送分!~~ 如何执行包含多语种的SQL语句呢?
oracle中得到一条SQL语句的执行时间的两种方式
SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL是需要通过编译器解释才能运行的(在这之间还要做SQL的优化)。而这些步骤都是需要运行成本,所以在数据库中有一个叫做执行计划的东西,编译器会将编译过后的SQL存入执行计划当中,当遇到同样的SQL时,就直接调用执行计划来执行,而不需要再次编译。
通过对上面执行计划的认识,为了提高数据库运行的效率,我们需要尽可能的命中执行计划,这样就可以节省运行时间。
2相关SQL
2.1查看当前数据库中所有的执行计划:
代码如下:
SELECT cp.usecounts AS '使用次数'
,objtype AS '类型'
,st.[text] AS 'SQL文本'
,plan_handle AS '计划句柄'
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text not like '%sys%'
2.2删除执行计划
代码如下:
--删除所有计划
DBCC FREEPROCCACHE
2.3测试脚本(创建员工表,并向其插入1000条数据)
代码如下:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]'))
DROP TABLE [dbo].Employee
GO
--人员表
CREATE TABLE dbo.Employee
(
id int,
name nvarchar(50)
);
--插入测试数据
DECLARE @I INT=0,@ENDI INT=1000;
WHILE(@I