数据库引擎优化顾问建议创建一个现存的索引(Database Tuning Advisor recom

2019-06-25 16:03发布

当我运行的SQL Server 2005数据库引擎优化顾问,它给出了一个建议创建一个索引,但它会建议指标,其上已经有一个索引的列。 为什么它给一个建议,再次创建相同的指数?

这是我的SQL:

SELECT t.name AS 'affected_table'
  , 'Create NonClustered Index IX_' + t.name + '_' 
   + CAST(ddmid.index_handle AS VARCHAR(10))
   + ' On ' + ddmid.STATEMENT 
   + ' (' + IsNull(ddmid.equality_columns,'') 
   + CASE 
     WHEN ddmid.equality_columns IS NOT NULL 
          AND ddmid.inequality_columns IS NOT NULL
     THEN ',' 
     ELSE '' 
     END 
   + ISNULL(ddmid.inequality_columns, '')
   + ')' 
   + ISNULL(' Include (' + ddmid.included_columns + ');', ';') 
  AS sql_statement
  , ddmigs.user_seeks
  , ddmigs.user_scans
  , CAST((ddmigs.user_seeks + ddmigs.user_scans) 
    * ddmigs.avg_user_impact AS INT) AS 'est_impact'
  , ddmigs.last_user_seek
FROM 
  sys.dm_db_missing_index_groups AS ddmig
  INNER JOIN sys.dm_db_missing_index_group_stats AS ddmigs
    ON ddmigs.group_handle = ddmig.index_group_handle
  INNER JOIN sys.dm_db_missing_index_details AS ddmid 
    ON ddmig.index_handle = ddmid.index_handle
  INNER Join sys.tables AS t
    ON ddmid.OBJECT_ID = t.OBJECT_ID
WHERE 
  ddmid.database_id = DB_ID()
  AND CAST((ddmigs.user_seeks + ddmigs.user_scans) 
  * ddmigs.avg_user_impact AS INT) > 100
ORDER BY 
  CAST((ddmigs.user_seeks + ddmigs.user_scans) 
  * ddmigs.avg_user_impact AS INT) DESC;

Answer 1:

也许尝试“DESC”命令以不同的方式?

这个工作在另一个相似的,所以问题... 为什么SQL Server 2005的动态管理视图报告缺失索引时,它不是?



Answer 2:

您可能需要运行查询并建议已经存在的指数。

SELECT * FROM table WITH INDEX(IX_INDEX_SHOULD_BE_USED) WHERE x = y

这是有索引可能无法从SQL Server认为是有用的。 运行是在暗示该指数的需要查询,看看SQL Server中的执行路径,然后建立是需要的其他指标。



Answer 3:

u能请列出完整的索引丢失的警告消息? 通常,它要求在表上创建索引,但只返回而不是在表上的索引,它会默认返回所有字段中的某些领域。



Answer 4:

来吧,脚本既出您当前指数strucutre的详细信息,然后比较这对由DTA提出建议步骤。

我怀疑你会发现有结果中的结构性差异。



文章来源: Database Tuning Advisor recommends to create an existing index