查询检查表上的索引

sin*_*ine 37 sql indexing sql-server-2008

我需要一个查询来查看表中是否已有任何索引.

gkr*_*ers 74

在SQL Server上,这将列出指定表的所有索引:

select * from sys.indexes
where object_id = (select object_id from sys.objects where name = 'MYTABLE')
Run Code Online (Sandbox Code Playgroud)

此查询将列出没有索引的所有表:

SELECT name
FROM sys.tables 
WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0
Run Code Online (Sandbox Code Playgroud)

这是一个有趣的MSDN常见问题解答,涉及相关主题:
查询SQL Server系统目录常见问题解答

  • 如何查看这些索引所在的列? (3认同)
  • 需要注意的是,如果表有多个索引,则顶级查询将失败,如果您需要查看有关索引的信息,或者只是希望查询在没有索引的情况下完成,请将`object_id = (select` 替换为`object_id IN (select`)错误。 (3认同)

nic*_*ckf 17

如果你使用MySQL,你可以运行SHOW KEYS FROM tableSHOW INDEXES FROM table


Sal*_*lim 9

如果您只需要索引列EXEC sp_helpindex'PET_NAME'


Don*_*nie 7

大多数现代RDBMS都支持该INFORMATION_SCHEMA模式.如果你支持,那么你想要INFORMATION_SCHEMA.TABLE_CONSTRAINTS或者INFORMATION_SCHEMA.KEY_COLUMN_USAGE,或者两者兼而有之.

要查看您的支持,就像运行一样简单

select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS

编辑:SQL Server确实有INFORMATION_SCHEMA,并且它比供应商特定的表更容易使用,所以只需使用它.

  • 顾名思义,ANSI标准视图`INFORMATION_SCHEMA.TABLE_CONSTRAINTS`仅显示约束.虽然一些约束是索引,但并非所有索引都是约束.此视图不会显示常规索引:它只显示`UNTRQUE`,`PRIMARY KEY`,`FOREIGN KEY`或`CHECK`的`CONSTRAINT_TYPE'.请参阅[SQL-99 Complete,Really]中的相关部分(https://mariadb.com/kb/en/sql-99-complete-really/16-sql-catalogs/the-information-schema/information_schema-视图/ information_schematable_constraints /) (3认同)

kil*_*man 7

只需使用以下命令即可找到特定表的索引名称和列名称

SP_HELPINDEX 'tablename'

这个对我有用


Mic*_*ter 5

以下是我用于 TSQL 的内容,它解决了我的表名可能包含架构名称以及可能包含数据库名称的问题:

DECLARE @THETABLE varchar(100);
SET @THETABLE = 'theschema.thetable';
select i.*
  from sys.indexes i
 where i.object_id = OBJECT_ID(@THETABLE)
   and i.name is not NULL;
Run Code Online (Sandbox Code Playgroud)

其用例是我想要指定表的索引列表,以便我可以编写一个过程来动态压缩表上的所有索引。