Sql 在Informix中创建索引的正确方法

Sql 在Informix中创建索引的正确方法,sql,indexing,informix,Sql,Indexing,Informix,在我的一个Informix表上,有两个索引只有三分之一的不同列。以下是索引: CREATE INDEX informix.ix_1 ON informix.test(date, operator, rn) CREATE INDEX informix.ix_2 ON informix.test(choice, date, operator) date is from type Date operator is Char(3) choice is Integer rn is In

在我的一个Informix表上,有两个索引只有三分之一的不同列。以下是索引:

CREATE INDEX informix.ix_1
    ON informix.test(date, operator, rn)

CREATE INDEX informix.ix_2
    ON informix.test(choice, date, operator)

date is from type Date
operator is Char(3)
choice is Integer
rn is Integer
将这些索引合并为一个索引并以这种方式删除它们是否明智:

CREATE INDEX informix.ix_new
        ON informix.test(date, operator, rn, choice)

索引设计基于需要索引支持的查询

索引中列的顺序很重要,这也与需要索引支持的查询有关

在分析查询之前,您无法确定合并索引是否明智


我不经常使用Informix,但我看到Informix性能指南中有一章是关于。您应该阅读该指南以获得有关如何分析查询的更多提示。

索引设计基于您需要索引支持的查询

索引中列的顺序很重要,这也与需要索引支持的查询有关

在分析查询之前,您无法确定合并索引是否明智


我不经常使用Informix,但我看到Informix性能指南中有一章是关于。您应该阅读该指南,以获得有关如何分析查询的更多提示。

如果不知道针对该表运行的查询,则不清楚这些索引是否有用。表的大小-宽度(列数及其类型)和长度(行数)也会计入公式中。由于索引不是唯一的,因此它们不用于强制执行键约束

如果总是指定确切日期,则可以使用
ix_1
索引。如果您还指定了一个运算符,它将更有用(限制性更强);如果您还指定了
rn
,它将非常有用。如果不指定日期,则不会使用
ix_1

类似地,对于
ix_2
,如果总是指定一个选项,则可以使用索引;如果还指定了运算符和日期,则会更有用(限制性更强)

对于新索引,“选择”列只有在您始终指定日期、运算符和
rn
时才有帮助

请记住,(非唯一)索引表示一种折衷。它们必须得到维护,因此当您添加新行、更新现有行中的一个索引列或删除一行时,还必须适当修改每个索引。如果索引经常在两次更改之间使用,那么维护成本将超过查询速度本身的成本。如果您很少查询该表,或者索引从未与针对该表运行的查询一起使用,那么索引只是存储开销(以及边际优化开销,因为必须对它们进行研究,以确定它们是否有助于查询,但这是二阶效应)。如果索引加快了查询速度,那么它们的维护成本就不是问题。如果它们从未被使用过,那么它们就是浪费精力

独特的索引通常有助于强制执行数据库约束,并受到不同的考虑,尽管有许多相似之处。如果某些列的组合必须是唯一的,则即使从未在任何查询中使用索引(尽管很可能会使用索引),索引也会起作用


所有这些几乎适用于任何使用索引的数据库。有很多关于为特定数据库设计设计索引方案的书籍。

在不知道对该表运行什么查询的情况下,不清楚这些索引是否有用。表的大小-宽度(列数及其类型)和长度(行数)也会计入公式中。由于索引不是唯一的,因此它们不用于强制执行键约束

如果总是指定确切日期,则可以使用
ix_1
索引。如果您还指定了一个运算符,它将更有用(限制性更强);如果您还指定了
rn
,它将非常有用。如果不指定日期,则不会使用
ix_1

类似地,对于
ix_2
,如果总是指定一个选项,则可以使用索引;如果还指定了运算符和日期,则会更有用(限制性更强)

对于新索引,“选择”列只有在您始终指定日期、运算符和
rn
时才有帮助

请记住,(非唯一)索引表示一种折衷。它们必须得到维护,因此当您添加新行、更新现有行中的一个索引列或删除一行时,还必须适当修改每个索引。如果索引经常在两次更改之间使用,那么维护成本将超过查询速度本身的成本。如果您很少查询该表,或者索引从未与针对该表运行的查询一起使用,那么索引只是存储开销(以及边际优化开销,因为必须对它们进行研究,以确定它们是否有助于查询,但这是二阶效应)。如果索引加快了查询速度,那么它们的维护成本就不是问题。如果它们从未被使用过,那么它们就是浪费精力

独特的索引通常有助于强制执行数据库约束,并受到不同的考虑,尽管有许多相似之处。如果某些列的组合必须是唯一的,则即使从未在任何查询中使用索引(尽管很可能会使用索引),索引也会起作用

所有这些几乎适用于任何使用索引的数据库。有整本书都是关于针对特定数据库设计的索引方案设计的