【问题标题】:What are the advantages and disadvantages of using a 'Partial Index'?使用“部分索引”的优点和缺点是什么?
【发布时间】:2024-10-05 16:35:02
【问题描述】:

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

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

但是在我们部署它之前,我们应该注意哪些缺点或注意事项?

【问题讨论】:

    标签: database postgresql indexing


    【解决方案1】:

    专业版:

    这减少了索引的大小, 这将加快执行的查询 使用索引。也会加速 许多表更新操作,因为 索引不需要更新 在所有情况下

    缺点:

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

    【讨论】:

      【解决方案2】:

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

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

      • 新 5%
      • 缺货 2%
      • 在途 5%
      • 已完成 85%
      • 返还 3%

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

      【讨论】:

      • +1。有时在生产环境中添加索引作为性能调整的一部分。部分索引允许 DBA 针对特定的极端情况进行调整,例如 (order_status = 'New'),而不会完全影响正常索引。