使用“部分索引”的优点和缺点是什么?

问题描述:

PostgreSQL允许“部分索引”,其基本上与条件谓词索引的创建。 http://www.postgresql.org/docs/8.2/static/indexes-partial.html使用“部分索引”的优点和缺点是什么?

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

但我们部署在此之前,还有我们应该意识到的任何缺点或警告?

临:

这降低了指数, 这将加快查询那些 使用索引的大小。这也将加快 许多表更新操作,因为 索引并不需要在所有情况下

进行更新

缺点:

因为这不再是一个真正的指数,如果你这样做完全加入或者对索引未涉及的值进行过滤时,性能会随着表大小的增长而降低。

主要需要注意的是不要不恰当地使用它们。它们对于识别符合一组标准的行很有用,其中这些行在大表中是少数。

以一个表Orders例如用order_status列和数据的分配在顺序状态如下:

  • 新5%
  • 延期交货2%
  • 运输中5%
  • 已完成85%
  • 已退回3%

如果您经常查询where order_status = 'New'获得的新订单列表,然后大部分只是直接引用ID订单剩下的时间里,然后部分指标将是有益的。在120k中12行的例子中,这更加真实。

+1

+1。有时在生产环境中,索引会作为性能调整的一部分添加。局部索引允许DBA调谐为特定角的情况下,如(ORDER_STATUS =“新”)不同时充分命中正常索引。 – 2010-05-24 15:50:17