PostgreSQL 允许创建“部分索引”,它们基本上是带有条件谓词的索引。http://www.postgresql.org/docs/8.2/static/indexes-partial.html
在测试时,我发现它们在查询仅访问具有 120k 行的表中的某些 12 行的情况下表现得非常好。
但是在我们部署它之前,是否有任何我们应该注意的缺点或警告?
PostgreSQL 允许创建“部分索引”,它们基本上是带有条件谓词的索引。http://www.postgresql.org/docs/8.2/static/indexes-partial.html
在测试时,我发现它们在查询仅访问具有 120k 行的表中的某些 12 行的情况下表现得非常好。
但是在我们部署它之前,是否有任何我们应该注意的缺点或警告?
主要的警告是不要不恰当地使用它们。它们适用于识别与一组标准匹配的行,其中这些行在大表中占少数。
以一个表格Orders
为例,其中包含一order_status
列以及您的数据在订单状态下的分布,如下所示:
如果您经常查询where order_status = 'New'
以获取新订单列表,然后大部分时间只是通过 ID 直接引用订单,那么部分索引将是有益的。在您的 120k 中有 12 行的示例中,情况更是如此。
临:
这会减小索引的大小,从而加快使用索引的查询。它还将加快许多表更新操作,因为在所有情况下都不需要更新索引
缺点:
由于这不再是一个真正的索引,如果您对索引未涵盖的值进行完全连接或过滤,则性能将随着表大小的增长而下降。