首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server 2008检查索引是否存在

SQL Server 2008检查索引是否存在
EN

Stack Overflow用户
提问于 2012-11-13 22:07:08
回答 2查看 33.8K关注 0票数 18

可能重复:

List of all index & index columns in SQL Server DB

我想知道是否有一种方法可以验证SQL Server数据库中是否存在基于列名的特定表的索引:

假设我运行以下脚本:

代码语言:javascript
复制
  CREATE NONCLUSTERED INDEX [MyIndexName]
  ON [dbo].[MyTable] ([CustomerId])
  INCLUDE ([Id],[ModificationDate],[ProductId])
  GO

现在,我想根据表名和列(以及include子句中的列)检查索引是否存在,而不是基于实际的索引名。

(SQL Server2008 R2)

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-11-13 22:17:45

尝试此查询:

代码语言:javascript
复制
if exists(
           SELECT 1 
           FROM sys.indexes 
           WHERE name = 'INDEX' 
           AND object_id = OBJECT_ID('TABLENAME')
          )
 begin
 ....
 end
票数 34
EN

Stack Overflow用户

发布于 2012-11-13 22:42:20

这些信息在目录元数据视图中可用,大致如下:

代码语言:javascript
复制
select ...
from sys.indexes i
join sys.index_columns ic on i.object_id = ic.object_id
    and i.index_id = ic.index_id
join sys.columns c
    on ic.object_id = c.object_id
    and ic.index_column_id = c.column_id
where i.object_id = object_id('MyTable')
and (c.name = 'CustomerId' and ic.key_ordinal = 1 and ic.is_descending_key = 0)
or (ic.is_included_column = 1 and c.name in ('Id', 'ModificationDate', 'ProductId'));

这不是产生yes/no的答案,而是向您显示可能已经覆盖您计划的索引。您需要考虑键位置、键方向和包含的列,并覆盖重叠( (K1,K2)封面(K1)上的索引,以及包括(C1,C2,C3)封面(C1,C3)的索引。对于一个真实的生产系统,你需要考虑隐式包含的列(例如:聚集索引键)、索引过滤器表达式和索引数据空间中的差异(即,分区)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13362163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档