当索引在多列上时检查索引是否存在

问题描述

我们最近对我们的系统数据库运行了一份缺失索引报告,发现很多都缺失了,但由于我们的数据库可能与每个客户端的索引不同,我们希望创建一种方法来判断索引是否已经存在。

我们的许多索引可以在多列、多列包含包含、单列和单列包含包含。很多时候索引被添加,我们没有一个很好的跟踪系统,可能不会按照我们认为的那样命名。综上所述,我需要一种方法来检查以下条件是否已存在索引。

  1. 名称是否已经存在?
  2. 索引是否已经存在于同一个表中,该索引具有相同的索引列,但具有相同的包含但名称不同?

任何建议将不胜感激。

谢谢

解决方法

检查索引是否已经存在

SELECT * FROM sys.indexes 
                WHERE object_id = OBJECT_ID('<your table name here>')
                AND name='<your index name here>')

这应该会为您提供带有列名的表中的所有索引。 https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-index-columns-transact-sql?view=sql-server-ver15

    SELECT i.name AS index_name,COL_NAME(ic.object_id,ic.column_id) AS column_name,ic.index_column_id,ic.key_ordinal,ic.is_included_column  
FROM sys.indexes AS i  
INNER JOIN sys.index_columns AS ic
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id  
WHERE i.object_id = OBJECT_ID('<your table here>')