SQLSERVER 缺少索引检查并且建立索引
前言
在做报表过程中发现报表数据出来得很慢,百思不得其解,最后发现是SQL语句主子表关联时缺少了索引,通过建立索引后SQL查询语句速度明显加快。
操作
- 先运行SQL脚本,得到sqlplan。
--查询执行计划
SELECT top 10
s.[session_id],
r.[start_time],
DATEDIFF(SECOND,r.start_time,GETDATE()) AS elapsed_seconds,
r.[status] AS RequestStatus,
DB_NAME(r.database_id) AS DatabaseName,
r.[reads],
r.[writes],
r.[logical_reads],
r.cpu_time,
r.total_elapsed_time,
s.[status] AS SessionStatus,
SUBSTRING (qt.text,
r.statement_start_offset/2,
(CASE WHEN r.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE r.statement_end_offset END -
r.statement_start_offset)/2) AS ExecutingSQL,
qp.query_plan
FROM sys.dm_exec_requests (nolock) r
INNER JOIN sys.dm_exec_sessions (nolock) s
ON r.session_id=s.session_id
LEFT JOIN sys.dm_exec_connections (nolock) c
ON c.session_id=s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) as qt
CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) as qp
order by 3 desc
- 找到对应的SQL语句的query_plan
- 打开sqlplan后,右键打开菜单选中“缺少索引详细信息”
- sql脚本会带出关键信息:
①建立索引后能带来的开销减少率;
②缺少索引的字段集。
- 建立索引,把注释删掉后输入索引名称即可
完结。