1

我有一个搜索表单,其中包含很多搜索选项。我将如何索引所有这些列?可以创建包含多列的索引吗?

导轨示例:

add_index :cars, [:brand, :fuel, :year_from, :year_to, :price_from, :price_to] and so on...

在单个索引中包含大量列是否“可以”?

PS 我正在使用最新的 Postgresql DS

4

2 回答 2

2

这取决于您计划如何查询数据库表。您是否计划运行将包含子句中所有字段的查询?

如果查询将包含子句中的所有字段,则创建多列索引是正确的方法,但如果您将在 where 子句中过滤的字段可能只是其中的一部分(例如,有时只有品牌和燃料,其他时候只有 year_from 和 year_to),并且在不同的组合中,您最好为每个字段创建一个索引...

于 2012-07-28T08:53:30.350 回答
0

多列索引将非常大,可能太大而无法使用。PostgreSQL 有一个很好的规划器,它可能会使用索引的前几列,然后扫描行而不是扫描索引的剩余部分。这是假设索引的前几列作为搜索条件给出的。

请注意,文档中有关于多列索引的说明,

应谨慎使用多列索引。在大多数情况下,单个列上的索引就足够了,并且可以节省空间和时间。具有超过三列的索引不太可能有帮助,除非表的使用非常程式化。

并使用单列索引。

当您对最有可能搜索的条件有一个很好的了解时,您可能希望在将来尝试添加一个或两个 2 列索引。

于 2012-07-28T11:38:01.020 回答