《Dissecting SQL Server Execution Plans》随记

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. 只能为索引视图创建唯一聚集索引

原文地址:https://www.cnblogs.com/Magicsky/p/1819355.html