首页 > 解决方案 > 使用大量索引确定 Postgres 查询的范围

问题描述

我有一个表(我们称之为表 A),其中包含大约 2 亿行。执行查询时,我需要根据调用者的授权来确定查询请求的范围,这是他们可以看到的记录 ID 的列表。问题有两个方面:

  1. 由于业务相关的原因,授权列表不能存储在数据库中,需要以某种方式与查询一起传入。
  2. 授权列表的大小可以超过 100k 个 ID。

使用此授权范围进行查询的最高效方式是什么?IN 子句感觉太大了,但我可能错了。

标签: sqlpostgresqlperformancerelational-database

解决方案


您可以创建一个包含这些标识符的临时表并与该表连接。确保ANALYZE明确表。得到体面的执行计划。

如果这超过了一个巨大的IN列表,我会进行一些性能测试。我想对于大名单它会。

我认为如果你必须传递这样的巨大列表,那么你的设计就有问题。那样你永远不会获得出色的性能——只需将这么多的数据发送到数据库将花费时间并占用你的网络资源,当然数据库也必须消化数据。


推荐阅读