如果索引不存在则创建索引

Posted

技术标签:

【中文标题】如果索引不存在则创建索引【英文标题】:Creating index if index doesn't exist 【发布时间】:2012-02-22 13:20:44 【问题描述】:

如果使用 sql 查询不存在优势数据库服务器,我在创建索引时遇到问题。

我的查询如下所示:

 If not Exists(<SELECT Query for amount of indizes for one column>) then 
 Create Index Test on Tablename (No); endif

所以我不使用 FullTextSearchIndizes,因为它是一个整数字段。否则它看起来像这样:

 If not Exists(SELECT * FROM tablename WHERE CONTAINS( * , 'Test' )) then 
 Create Index Test on Tablename (Name) Content; endif     

所以,我唯一的问题是如何获取索引。我在其他 DBMS 中阅读过,您可以使用 sys.indexes 和其他一些东西。

【问题讨论】:

【参考方案1】:

看看系统表:

https://devzone.advantagedatabase.com/dz/webhelp/Advantage10/devguide_system_tables.htm

特别是有一个表叫system.indexes

https://devzone.advantagedatabase.com/dz/webhelp/Advantage10/master_system_indexes.htm

【讨论】:

【参考方案2】:

使用系统命令尝试类似的操作。这是我在 Advantage 数据库上使用的一个工作示例:

IF (SELECT Name FROM system.indexes
   WHERE Index_File_Name = 'GLDept.adi'
   AND Index_Expression = 'DeptNumber') IS NULL
THEN
   EXECUTE PROCEDURE sp_CreateIndex90( 
   'GLDept',
   'GLDept.adi',
   'DEPTNUMBER',
   'DeptNumber',
   '',
   2051,
   512,
   '' );
END IF;

【讨论】:

【参考方案3】:

有一个简单的方法可以做到这一点:

IF NOT EXISTS (SELECT name FROM sysindexes WHERE name = 'IX_MyTable_MyColumn') 
    CREATE INDEX [IX_MyTable_MyColumn] ON [dbo].[MyTable] ([MyColumn]);

【讨论】:

以上是关于如果索引不存在则创建索引的主要内容,如果未能解决你的问题,请参考以下文章

如何解决Oracle“不能创建唯一索引,发现重复记录”问题

是否可以命名在 oracle 中创建主键期间创建的索引?

oracle 索引存在则删除

如何创建唯一索引

Lucene 索引维护

SQL语句-创建索引