我正在使用 PostgreSQL,我打算分页。目标表包含 1M+ 行。原则上,这是直截了当的
SELECT * FROM myTable ORDER BY orderCol LIMIT <pageSize> OFFSET <offset>;
现在,当 orderCol 被索引时,这很快,但当 orderCol 没有索引时,速度要慢一个数量级。显然,在最坏的情况下,dbms 被迫执行全表扫描,并且必须对请求的每个页面的数据进行排序。
[编辑:更具体地说,orderCol
可能会改变,即在运行时确定。]
[ Edit2:索引提高排序性能的一般假设orderCol
似乎是错误的。如果我向 中添加索引orderCol
,查询时间会增加约 70%。]
一个明显的解决方案是根据需要创建一个带有适当索引的临时表,并用适当的数据填充表(……我认为)。但这会复制所有数据。
有没有一种方法可以“保留”请求之间的排序顺序?或者创建一个临时索引?
非常感谢您提前回答。