为什么向clickhouse查询添加偏移量会增加执行时间?

wswtfjt7  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(455)

我有一张有大约900万条记录的table。当我尝试选择具有大偏移量的记录(用于分页)时,它会将执行时间增加到非常大的值。甚至导致超过内存限制而失败。
下面是两个不同偏移量值的查询日志。
选择*where set \u date>=“2019-10-11 11:05:00”和set \u date<=“2019-10-19 18:09:59”order by id asc limit 1 offset 30

Elapsed: 0.729 sec. Processed 9.92 million rows, 3.06 GB (13.61 million rows/s., 4.19 GB/s.) 
MemoryTracker: Peak memory usage (for query): 181.65 MiB.

选择*where set \u date>=“2019-10-11 11:05:00”和set \u date<=“2019-10-19 18:09:59”order by id asc limit 1 offset 3000000

Elapsed: 6.301 sec. Processed 9.92 million rows, 3.06 GB (1.57 million rows/s., 485.35 MB/s.) 
MemoryTracker: Peak memory usage (for query): 5.89 GiB.
tzdcorbm

tzdcorbm1#

所有数据库包括ch实现 OFFSET 同样的方法。他们只是读所有的行然后跳过 OFFSET 在结果集中。没有优化上升到抵消3000000的权利。
https://www.eversql.com/faster-pagination-in-mysql-why-order-by-with-limit-and-offset-is-slow/
尝试禁用“优化读取”以修复内存使用情况

SELECT * 
WHERE set_date >= '2019-10-11 11:05:00' 
AND set_date <= '2019-10-19 18:09:59' 
ORDER BY id ASC LIMIT 1 OFFSET 3000000
setting optimize_read_in_order=0

相关问题