0

我正在尝试从一个大表中选择行(~10M 行)
该表包含一个timestamp我设置索引 的列

我想按顺序(按时间戳排序)按 N 行的块取行,这就是我使用limitoffset

我从不同的进程运行并行查询

查询需要很长时间,并且我的服务器的磁盘使用量激增(比正常磁盘使用量多 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

关于如何优化此过程的任何想法?非常感谢

4

1 回答 1

0

https://www.eversql.com/faster-pagination-in-mysql-why-order-by-with-limit-and-offset-is-slow/

这使用一个唯一的列作为书签,以防止使用偏移量

于 2017-11-27T14:07:47.140 回答