我需要一个查询来查看表中是否已有任何索引.
在SQL Server上,这将列出指定表的所有索引:
select * from sys.indexes where object_id = (select object_id from sys.objects where name = 'MYTABLE')
此查询将列出没有索引的所有表:
SELECT name FROM sys.tables WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0
这是一个有趣的MSDN常见问题解答,涉及相关主题:
查询SQL Server系统目录常见问题解答
如果你使用MySQL,你可以运行SHOW KEYS FROM table
或SHOW INDEXES FROM table
如果您只需要索引列EXEC sp_helpindex'PET_NAME'
大多数现代RDBMS都支持该INFORMATION_SCHEMA
模式.如果你支持,那么你想要INFORMATION_SCHEMA.TABLE_CONSTRAINTS
或者INFORMATION_SCHEMA.KEY_COLUMN_USAGE
,或者两者兼而有之.
要查看您的支持,就像运行一样简单
select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
编辑:SQL Server确实有INFORMATION_SCHEMA
,并且它比供应商特定的表更容易使用,所以只需使用它.