《Dissecting SQL Server Execution Plans》随记
时间:2010-09-06 来源:魔幻天空
1.常用分析语句
DBCC FREEPROCCACHE --清缓存
DBCC DROPCLEANBUFFERS --清缓冲区
--获取性能信息
set statistics profile on
set statistics io on
set statistics time on
使用 SET STATISTICS XML ON 选项打开 XML 显示计划功能
--查看已经缓存的sql
SELECT [cp].[refcounts]
,[cp].[usecounts]
,[cp].[objtype]
,[st].[dbid]
,[st].[objectid]
,[st].[text]
,[qp].[query_plan]
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp ;
2.何时实际与执行计划不同?
1.统计过期
2. 需要并发
3.聚合索引包含全部的列数据,因此即使返回全部列也不会有【嵌套循环】和【键查找】
排序:SQLSERVER会首先利用内存进行排序,若内存不足,则会启用TEMPDB进行排序,此时将报告一个警告,如果出现警告,请改善内存大小或程序本身。
4.CTE 公用表表达式 可作为递归
5.实体化视图/索引视图(视图存储数据,tempdb,插入时自动更新)
1. 创建索引视图的时候需要指定表所属的架构
2.在创建索引视图的select语句时,不使用*,必须指定具体的列名
3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了
4. 只能为索引视图创建唯一聚集索引