代码之家  ›  专栏  ›  技术社区  ›  Jalpesh Vadgama

数据库优化顾问建议创建现有索引

  •  4
  • Jalpesh Vadgama  · 技术社区  · 15 年前

    当我运行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;
    
    4 回复  |  直到 15 年前
        1
  •  7
  •   Community George Mulligan    7 年前

    也许可以尝试“描述”以另一种方式订购?

    这在另一个类似的问题中起作用,所以… Why does SQL Server 2005 Dynamic Management View report a missing index when it is not?

        2
  •  0
  •   AutomatedTester    15 年前

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

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

    存在的索引在SQL Server中可能不太有用。运行建议需要索引的查询,并在SQL Server中查看执行路径,然后构建所需的其他索引。

        3
  •  0
  •   Pure.Krome    15 年前

    你能列出完整的索引缺失警告信息吗?通常,它要求在表上创建索引,但只返回某些字段,而不返回表上的索引,默认情况下,该索引将返回所有字段。

        4
  •  0
  •   John Sansom    15 年前

    继续编写当前索引结构的详细信息脚本,然后将其与DTA所做的更正进行比较。

    我怀疑你会发现结果中存在结构性差异。