sql - 使用大量索引确定 Postgres 查询的范围
问题描述
我有一个表(我们称之为表 A),其中包含大约 2 亿行。执行查询时,我需要根据调用者的授权来确定查询请求的范围,这是他们可以看到的记录 ID 的列表。问题有两个方面:
- 由于业务相关的原因,授权列表不能存储在数据库中,需要以某种方式与查询一起传入。
- 授权列表的大小可以超过 100k 个 ID。
使用此授权范围进行查询的最高效方式是什么?IN 子句感觉太大了,但我可能错了。
解决方案
您可以创建一个包含这些标识符的临时表并与该表连接。确保ANALYZE
明确表。得到体面的执行计划。
如果这超过了一个巨大的IN
列表,我会进行一些性能测试。我想对于大名单它会。
我认为如果你必须传递这样的巨大列表,那么你的设计就有问题。那样你永远不会获得出色的性能——只需将这么多的数据发送到数据库将花费时间并占用你的网络资源,当然数据库也必须消化数据。
推荐阅读
- mysql - AWS Glue 测试与 MySQL RDS 实例的连接失败,日志中没有错误
- neo4j - 查询路径时返回关系
- microsoft-translator - 微软翻译服务可以将上下文作为翻译参数吗?
- javascript - 如何在 Jest 中重置测试之间的模拟呼叫记录?
- javascript - (Vue.js) 对表格进行排序后保留item的详细信息视图
- flutter - 在初始化之前添加泛型类型和忽略它有什么区别
- python - 从 Tweepy 流中获取转推和最喜欢的计数
- reactjs - reactjs如何获取表格单元格的当前值
- javascript - 如何将现有的 pdf 文件添加到我的 React.js 页面?
- python - 以字符串形式打印 url 女巫的内容有表情符号