我正在尝试从一个大表中选择行(~10M 行)
该表包含一个timestamp
我设置索引 的列
我想按顺序(按时间戳排序)按 N 行的块取行,这就是我使用limit
和offset
我从不同的进程运行并行查询
查询需要很长时间,并且我的服务器的磁盘使用量激增(比正常磁盘使用量多 150G)
查询完成后,磁盘使用率恢复正常
这是我的查询的解释(这个没有order by
)
my_db=# explain select * from my_table order limit 1 offset 1;
QUERY PLAN
---------------------------------------------------------------------------------
Limit (cost=0.14..0.28 rows=1 width=1001)
-> Seq Scan on my_table (cost=0.00..1447042.46 rows=10162346 width=1001)
以下是真实查询的样子:
SELECT my_column
FROM my_table
WHERE id > x
ORDER BY timestamp ASC
limit y
OFFSET z
关于如何优化此过程的任何想法?非常感谢