考虑一个只读表T,这个表的查询模式是:
select some_columns
from T
where some_conditions
order by fixed_col1, fixed_col2
有没有办法让我在运行时省略 order by
子句,离线预排序表并将排序后的行存储在 T 中,这样当我选择
如果没有 order by
,所选行已经排序了吗?
PS:行为必须在某处记录,或者是 PG 社区的常识。
最佳答案
您可以使用 CLUSTER
command ,或者您可以通过命令 CREATE TABLE xxx AS SELECT ... ORDER BY
创建新表。你仍然应该使用 ORDER BY
语句,因为 PostgreSQL 已经优化了更大表的读取,并尝试对更多进程使用同步读取。这种同步可以这样做,一个进程的表读取从表的 1/3 开始 - 读取到结束,返回开始并读取第一个 1/3。所以 Postgres 也不保证按物理顺序读取数据。
关于sql - 有没有办法在 postgres 中存储预先排序的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64548175/