【发布时间】:2010-06-26 14:33:44
【问题描述】:
假设我对一个数据库表有两个查询。
查询是根据查询中使用的字段定义的:
Query1:取决于 f1、f2 和 f3
Query2:取决于 f1、f2、f3 和 f4
我记得在某处读到 SQL 查询引擎(在本例中为 mySQL)从索引中最左边的字段开始解析索引树。
如果这是正确的,那么我假设不是像这样在表上定义两个索引:
Index 1 (for Query1) : CREATE INDEX idx_1 {f1, f2, f3}
Index 2 (for Query2) : CREATE INDEX idx_2 {f1, f2, f3, f4}
我可以简单地定义一个索引,其中包含两个查询中使用的键的联合 - 即
我只需要定义这个索引:
(for BOTH Query1) : CREATE INDEX the_idx {f1, f2, f3, f4}
我有两个问题:
我的假设正确吗?即我可以简单地定义一个索引(the_idx)而不是前两个吗?
这种索引行为是否也适用于 PostgreSQL 查询引擎?
【问题讨论】:
-
这个假设是关于 B-TREE,而不是关于其他类型的索引。 Wikipedia 上有关于 HASH、GIN、GIST、RED-BLACK 等的信息。深入了解您的数据库手册,它有更多关于索引实现的信息。
标签: sql mysql postgresql query-performance