很多索引Postgresql

时间:2012-07-28 08:45:42

标签: ruby-on-rails postgresql indexing

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

Rails示例:

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

在单个索引中包含大量列是“ok”吗?

P.S我正在使用最新的Postgresql D.S

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

请注意,documentation可以说明多列索引,

  

应谨慎使用多列索引。在大多数情况下,   单列上的索引就足够了,节省了空间和时间。   除非有以下情况,否则超过三列的索引不太可能有用   表的用法非常风格化。

并使用单列索引。

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