postgresql - Postgres 选择带有偏移量的大表查询需要太多时间来处理
问题描述
为了处理一个有 300 万行的表,我在 psql 中使用了以下查询:
select id, trans_id, name
from omx.customer
where user_token is null
order by id, trans_id l
imit 1000 offset 200000000
获取数据需要 3 分钟以上。如何提高性能?
解决方案
您遇到的问题是,要知道要获取数据库的 1000 条记录实际上必须获取所有 200000000 条记录来计算它们。
解决这个问题的主要策略是使用 where 子句而不是偏移量。
如果您知道前 1000 行(因为这是某种迭代使用的查询),您可以取而代之从该集合的最后一行获取 id 和 trans_id 并获取其后面的 1000 行。
如果 200000000 的数字不需要精确,并且您可以很好地猜测从哪里开始,那么这可能是解决问题的途径。
推荐阅读
- data-cleaning - 制表符过多时如何修复制表符分隔文件?
- c# - Docker 容器中的 .net Core 控制台应用程序抛出 System.ObjectDisposedException
- xml - 根据内部内容提取 XML 元素
- java - 如何在 JDateChooser 中设置最小值和最大值?
- python - Django ImportError:无法导入名称“视图”
- c - 这是关于复三数
- php - 在 SVG 文件中使用 XML 声明时如何避免 PHP 错误消息?
- java - GLFW 未初始化窗口 (LWJGL)
- javascript - Apollo:props/cache 不会在 refetchQueries 中更新
- angular - (Angular 8)为什么无法重新加载强制重定向路由引用的路由?