sql - 带有 OFFSET 的 PostgreSQL LIMIT 不能超过 100000
问题描述
我正在为我的项目使用 postgres (9.6) docker。加载大量数据后,例如 234453,我需要使用 limit 和 offset 将数据切割成块。但是我观察到我的查询超出了 100000 的限制。就像我在给出限制 100000 时可以剪切一样。但是当我使用 120000 时,它就挂起。
加载的数据:234453 行查询:这正在工作:docker exec -it pg_1 psql -P pager postgres postgres -t -c“从 schema1.table1 中删除 col_id 不在(从 schema1.table1 限制 100000 偏移 1 中选择 col_id)”
这是挂了: docker exec -it pg_1 psql -P pager postgres postgres -t -c “从 schema1.table1 中删除 col_id 不在(从 schema1.table1 限制 120000 偏移 1 中选择 col_id)”
下一次削减应该是从 100001 到 230000,类似这样。
你能告诉我吗,我该怎么做?或者我是否做错了什么?
谢谢, 苏文杜
解决方案
Offset Pagination
只有当OFFSET
值相对较小时才有效。
否则,即使您索引排序和过滤条件,数据库也必须扫描索引并计算条目,直到它达到正确的OFFSET
值。对于非常大的值,这意味着几乎完全扫描了索引。
所以,你最好使用Keyset Pagination
.
推荐阅读
- java - Java keytool (keytool) 未找到,请安装
- string - 向字符串添加新字符的不同格式的不同输出
- android - 布局验证与加载程序 android Studio 不同
- python - Python如何检查文件是否使用记事本打开
- python - gunicorn 默认使用多少个工人?
- msbuild - 还原旧包(net40、netframework40)时,较新版本的 NuGet.exe 无法解析框架匹配
- python - Python:需要帮助比较两个列表
- c++ - 删除 QTextEdit 时奇怪的 Qt 崩溃
- robotframework - 由于没有找到名称为“从字典中获取”的关键字错误,我无法使用机器人框架运行我的代码
- flutter - 如何在颤动的屏幕底部放置一行