【问题标题】:Check if index exist when index is on multiple columns当索引在多个列上时检查索引是否存在
【发布时间】:2021-03-30 14:16:02
【问题描述】:

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

我们的许多索引可以位于多列、包含包含的多列、单列和包含包含的单列上。很多时候添加了索引,但我们没有一个好的跟踪系统,可能不会像我们认为的那样命名。尽管如此,我需要一种方法来检查索引是否已经存在于以下条件。

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

任何建议将不胜感激。

谢谢

【问题讨论】:

  • SQL SERVER 2017
  • 我为我的索引提供了规范的名称(例如 table_column_column)。这样可以很容易地扫描索引名称以查看存在和不存在的内容。
  • 我们只是说您应该从查询计划中获取缺失索引建议,但要加点盐。你可能会发现sp_BlitzIndex by Brent Ozar 更有用

标签: sql indexing sql-server-2017


【解决方案1】:

检查索引是否已经存在

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>')

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2021-07-22
    • 2016-09-19
    • 2013-11-03
    • 2012-11-30
    • 2015-09-16
    • 1970-01-01
    • 2018-07-01
    • 2013-05-28
    相关资源
    最近更新 更多