[PostgreSQL请教] 性能问题疑问

前几天有个意外的问题, 就是一个简单的 SELECT id, name, balance... 语句因为有 LIMIT...OFFSET 翻页而延迟时间差别大
例如第一页时 LIMIT 10 OFFSET 0 还是挺正常蛮快的, 但当用户翻到后面几页的时候 LIMIT 10 OFFSET 400 就慢了挺多

但是我换成先只返回id(query语句一样), 再调用一个SELECT就快了许多

我原以为这两个在实际的运行是一样的, query不是先计算满足WHERE再去获取对应SELECT了什么吗? 看样子是先整个SELECT...WHERE...执行完再去取LIMIT...OFFSET, 取出的结果是一模一样的
从数学逻辑这二者是一模一样的(a+b=b+a) 理论上这是否可以是Postgres内部的优化选项?
[本人PostgreSQL小白]

前面加个 EXPLAIN ANALYZE 一下?

1 个赞

感恩, 因为我这个数据库是从我上一个项目MySQL的转到Postgres里的, 所以里面一个子项 phone 造成了非常慢, 因为转过去后没有主键和UNIQUE KEY, 所以这个phone需要迭代所有项
当我把 UNIQUE KEY 加上去后就快多了

请教, 我现在用这个 Navicat 来把数据库从MySQL转为Postgres image
不是太过顺利(例如Primary/Foreign Keys都没有的), 请问有没有经验分享?
我现在想到的就是先自己在Postgres里把所有表格建立好, 再通过postmodern + cl-mysql 来自己调用SQL把数据转接过去(或者改为node)