【问题标题】:List all indexes with included columns(nonkeys)列出所有包含列的索引(非键)
【发布时间】:2013-08-12 21:37:19
【问题描述】:

我曾尝试过 sp_helpindex,但它显示了具有索引的列而不是包含的列。请告诉我如何列出包含列(非键)的所有索引?

【问题讨论】:

标签: sql-server indexing


【解决方案1】:

如果您想要一个全局系统存储过程可用于获取索引键/非键(包含)列,请运行以下代码

USE master
GO

CREATE PROCEDURE sp_helpcolindex
    @objname NVARCHAR(776)
AS
BEGIN
    SELECT 
        c.Name,
        CASE ic.is_included_column WHEN 0 THEN 'Key' ELSE 'Include' END AS [Type]
    FROM sys.indexes i
    JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
    WHERE i.name = @objname 
    ORDER BY [Type] DESC
END
GO

EXEC sp_ms_marksystemobject 'sp_helpcolindex' 
GO 

【讨论】:

    【解决方案2】:

    针对目录视图尝试此 T-SQL 查询:

    SELECT 
        IndexName = i.Name,
        ColName = c.Name
    FROM 
        sys.indexes i
    INNER JOIN 
        sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    INNER JOIN 
        sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
    WHERE
        ic.is_included_column = 1
    ORDER BY 
        i.Name
    

    它基本上检查所有索引 (sys.indexes),然后链接到它们的列并检查哪些列被设计为包含列 (ic.is_included_column = 1),然后列出所有这些索引和所有这些列。

    【讨论】:

    • 非常感谢这段代码。我一直在寻找一种方法来识别特定表和列上的索引。这是我找到的最干净、最准确的 SQL。
    • 我得到的结果好坏参半。似乎如果给定表上有多个索引,则只返回该表中的一个。
    【解决方案3】:

    复制自http://www.midnightdba.com/Jen/2009/12/get-index-included-column-info/

    SELECT 
     OBJECT_NAME(i.[object_id]) TableName ,
     i.[name] IndexName ,
     c.[name] ColumnName ,
     ic.is_included_column ,
     i.index_id ,
     i.type_desc ,
     i.is_unique ,
     i.data_space_id ,
     i.ignore_dup_key ,
     i.is_primary_key ,
     i.is_unique_constraint
    FROM 
     sys.indexes i
     JOIN sys.index_columns ic ON ic.object_id = i.object_id and i.index_id = ic.index_id
     JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
    ORDER BY 
     tableName ,
     ic.index_id ,
     ic.index_column_id
    

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2014-08-25
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多