Query index needs to be created (including the statement creation)

;WITH T AS (
SELECT
DB_NAME(a.database_id) DBNAME,
SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11) TableName,
avg_user_impact,
avg_total_user_cost,
'use ['+DB_NAME(a.database_id)+'];if not exists(select 1 from sysindexes where name=''ix_' + SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11) +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(equality_columns,'[','_'),']',''),',',''),' ',''), '') +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(inequality_columns,'[','_'),']',''),',',''),' ',''), '') + ''')CREATE INDEX [ix_' + SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11) +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(equality_columns,'[','_'),']',''),',',''),' ',''), '') +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(inequality_columns,'[','_'),']',''),',',''),' ',''), '') + '] ON ' + SUBSTRING([statement],LEN(DB_NAME(a.database_id))+4,LEN([statement])-LEN(DB_NAME(a.database_id))-3) +
' (' + ISNULL(equality_columns, ' ') + CASE WHEN equality_columns IS NOT NULL AND inequality_columns IS NOT NULL THEN ',' ELSE '' end + ISNULL(inequality_columns, ' ') + ')' +
ISNULL(' INCLUDE (' + included_columns + ')', '') +';'
AS MissIndex
,'use ['+DB_NAME(a.database_id)+'];if exists(select 1 from sysindexes where name=''ix_' + SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11) +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(equality_columns,'[','_'),']',''),',',''),' ',''), '') +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(inequality_columns,'[','_'),']',''),',',''),' ',''), '') + ''')drop index [ix_' + SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11) +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(equality_columns,'[','_'),']',''),',',''),' ',''), '') +
ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(inequality_columns,'[','_'),']',''),',',''),' ',''), '') + '] on ['+SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11)+'];' DropIndex
,'ix_' + SUBSTRING([statement],LEN(DB_NAME(a.database_id))+11,LEN([statement])-LEN(DB_NAME(a.database_id))-11) +
After avg_user_impact AS [achieve this missing index group, the average percentage of user queries possible gain. This value represents the realization if this missing index group, the query cost an average decline Click percentage. ] , T1.avg_total_user_cost AS [achieve an average cost of user queries after this missing index group, reduced]













,t1.DropIndex [缺失索引的删除]
,t1.MissIndexName [缺失索引名称]
FROM T t1
WHERE 1=1
AND NOT EXISTS(SELECT 1 FROM T t2 WHERE t1.MissIndexName!=t2.MissIndexName and SUBSTRING(t2.MissIndexName,1,LEN(t1.MissIndexName))=t1.MissIndexName)
AND t1.MissIndexName NOT IN (SELECT name from sys.indexes WHERE object_id IN (SELECT object_id FROM sys.tables WHERE type='U') AND type=2)
and t1.DBNAME in (Select Name From Master..SysDataBases Where DbId=(Select Dbid From Master..SysProcesses Where Spid = @@spid))
ORDER BY t1.DBNAME ASC,t1.avg_user_impact DESC,t1.TableName ASC
go

Guess you like

Origin www.cnblogs.com/xwma/p/11608584.html