3

PostgreSQL 允许创建“部分索引”,它们基本上是带有条件谓词的索引。http://www.postgresql.org/docs/8.2/static/indexes-partial.html

在测试时,我发现它们在查询仅访问具有 120k 行的表中的某些 12 行的情况下表现得非常好。

但是在我们部署它之前,是否有任何我们应该注意的缺点或警告?

4

2 回答 2

6

主要的警告是不要不恰当地使用它们。它们适用于识别与一组标准匹配的行,其中这些行在大表中占少数。

以一个表格Orders为例,其中包含一order_status列以及您的数据在订单状态下的分布,如下所示:

  • 新 5%
  • 缺货 2%
  • 在途 5%
  • 完成 85%
  • 退货 3%

如果您经常查询where order_status = 'New'以获取新订单列表,然后大部分时间只是通过 ID 直接引用订单,那么部分索引将是有益的。在您的 120k 中有 12 行的示例中,情况更是如此。

于 2008-12-23T04:18:31.343 回答
5

临:

这会减小索引的大小,从而加快使用索引的查询。它还将加快许多表更新操作,因为在所有情况下都不需要更新索引

缺点:

由于这不再是一个真正的索引,如果您对索引未涵盖的值进行完全连接或过滤,则性能将随着表大小的增长而下降。

于 2008-11-12T09:32:17.773 回答