如何在firebird中创建索引以改进选择查询

时间:2013-10-07 09:19:53

标签: sql indexing firebird

我是使用火鸟的新手。我有3张桌子。

对于 T_TABLE1 ,结构如下所示:

enter image description here

对于 T_TABLE2 ,结构如下所示:

enter image description here

对于 T_TABLE3 ,结构如下:

enter image description here

主键是 T_TABLE1 中的 ID T_TABEL2 中的 TBL1_ID TBL1_ID T_TABLE3 。如何选择与3个表的数据连接,我想使用索引进行最佳选择查询,但我不知道如何创建索引,因为我是使用firebird的新手,我想了解更多在使用火鸟。希望我的解释清楚。

1 个答案:

答案 0 :(得分:3)

“Firebird 2.5语言参考”CREATE INDEX中记录了创建索引的语法,它还包含其他信息。

创建索引的语法是:

CREATE [UNIQUE] [ASC[ENDING] | [DESC[ENDING]] INDEX indexname
   ON tablename
   { (<col> [, <col> ...]) | COMPUTED BY (expression) }

<col>  ::=  a column not of type ARRAY, BLOB or COMPUTED BY

因此,要在T_TABEL2.TBL1_ID上创建(升序)索引,您可以执行以下操作:

CREATE INDEX ix_tabel2_tbl1_id ON T_TABEL2 (TBL1_ID)

但正如我今天早些时候评论的那样,如果此列上有外键,则没有必要,因为Firebird中的外键会自动获取索引(同样适用于主键)。

从您的问题中不清楚您是否有外键,但我建议您创建它们而不是索引:它为您提供索引,并在此基础上强制执行TBL1_ID的值实际上存在于T_TABLE1中。

请记住,创建索引不会自动提高性能。例如,优化器可能会决定使用索引是不值得的(或者特定索引与查询无关)。