我有一个搜索表单,有很多搜索选项。我如何索引所有这些列?是否可以创建包含多列的索引?
Rails示例:
add_index :cars, [:brand, :fuel, :year_from, :year_to, :price_from, :price_to] and so on...
在单个索引中包含大量列是“ok”吗?
P.S我正在使用最新的Postgresql D.S
答案 0 :(得分:2)
这取决于您计划查询数据库表的方式。您是否计划运行一个将包含该子句中所有字段的查询?
如果查询将包含子句中的所有字段,则创建多列索引是正确的方法,但是如果要在where子句中过滤的字段可能只是其中的一部分(例如,有时只有品牌)和燃料,以及其他时间只有year_from和year_to)以及不同的组合,你最好为每个字段创建一个索引 ......
答案 1 :(得分:0)
多列索引会非常大,可能太大而无法使用。 PostgreSQL有一个很好的规划器,它可能会使用索引的前几列,然后扫描行而不是扫描索引的剩余大部分。这假设索引的前几列是作为搜索条件给出的。
请注意,documentation可以说明多列索引,
应谨慎使用多列索引。在大多数情况下, 单列上的索引就足够了,节省了空间和时间。 除非有以下情况,否则超过三列的索引不太可能有用 表的用法非常风格化。
并使用单列索引。
当您很好地了解最有可能搜索的条件时,您可能希望尝试在将来添加2列或2个索引。