使用"部分索引"有哪些优缺点?

Arn*_*nav 3 database postgresql indexing

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

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

但在我们部署之前,我们应该注意哪些缺点或警告?

cop*_*360 6

主要的警告是不要不恰当地使用它们.它们适用于标识符合一组条件的行,其中这些行在大型表中是少数.

以表Orders为例,order_status以列为单位,并在订单状态中分发您的数据,如下所示:

  • 新5%
  • 缺货2%
  • 在过境5%
  • 完成85%
  • 退回3%

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


Eug*_*ota 5

专业人士:

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

缺点:

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