sql-server - 列出所有索引

标签 sql-server indexing metadata sysobjects

我想知道列出数据库中所有表的所有索引的最简单方法是什么。

我应该为每个表调用 sp_helpindex 并将结果存储在临时表中,还是有更简单的方法?

任何人都可以解释为什么约束存储在 sysobjects 中而索引不是?

最佳答案

以下是您需要的查询类型的示例:

select 
    i.name as IndexName, 
    o.name as TableName, 
    ic.key_ordinal as ColumnOrder,
    ic.is_included_column as IsIncluded, 
    co.[name] as ColumnName
from sys.indexes i 
join sys.objects o on i.object_id = o.object_id
join sys.index_columns ic on ic.object_id = i.object_id 
    and ic.index_id = i.index_id
join sys.columns co on co.object_id = i.object_id 
    and co.column_id = ic.column_id
where i.[type] = 2 
and i.is_unique = 0 
and i.is_primary_key = 0
and o.[type] = 'U'
--and ic.is_included_column = 0
order by o.[name], i.[name], ic.is_included_column, ic.key_ordinal
;

这个在某种程度上特定于某种目的(我在一个小型 C# 应用程序中使用它来查找重复索引并格式化输出,以便人类实际上可以读取)。但您可以轻松地根据您的需求进行调整。

关于sql-server - 列出所有索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425475/

相关文章:

sql - 如何从 sql 数据透视表中删除空值?

mongodb - 内部结构地理空间索引

python - 假设我在数据库中有 400 行人名。搜索他们姓名的最佳方式是什么?

javascript - 表单元格循环错误地产生 undefined index

sas - 在 SAS Base 上通过程序在 SAS Metadata Server 中创建内部帐户

sql - SQL中如何获取所有不包含特定2个字符的字段?

sql-server - Sql 命令 - 类似于 % 运算符

sql-server - 如何从Databricks集群运行SQL语句

Java:如何读取视频文件中的可用音轨?

ios - 将元数据添加到视频文件