【问题标题】:How to create index in firebird for improvement of select query如何在 firebird 中创建索引以改进选择查询
【发布时间】:2013-10-07 09:19:52
【问题描述】:

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

T_TABLE1的结构如下所示:

T_TABLE2结构如下:

对于T_TABLE3,结构如下:

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

【问题讨论】:

  • 您是否有从T_TABEL2.TBL1_IDT_TABLE1.ID 的外键(T_TABLE3.TBL1_ID 也一样)?如果是这样,则无需添加其他相关索引。有关文档,请参阅firebirdsql.org/en/reference-manuals

标签: sql indexing firebird


【解决方案1】:

The Firebird 2.5 Language Reference, 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.

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

【讨论】:

  • 好的,先生。谢谢!我的表中没有外键。我将创建外键。先生,如果我已经有一个外键,我该如何使用带有 INDEX 的 SELECT 查询?谢谢先生。我真的不知道使用 INDEX。但是,我开始阅读手册和教程,但其他的还不清楚。我阅读了有关使用“计划”的信息。谢谢!
  • Firebird 本身会自动选择一个相关的索引(并有望提高性能)。如果您认为 Firebird 是错误的,您可以指定一个明确的计划,但如果您是新手,最好忽略它。
猜你喜欢
  • 2022-01-17
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多