gpt4 book ai didi

java - 如何优化 SELECT DISTINCT sql 的分页?

转载 作者:行者123 更新时间:2023-12-01 12:30:47 25 4
gpt4 key购买 nike

我的查询是一个非常大的数据库上的不同选择,在 pgAdmin sql 工具中,查询本身持续 12 秒。

SELECT DISTINCT ON (city, airport, zip, country, name) city, airport, price, id FROM mytable;

spring-batch reader定义:

JpaPagingItemReader<MyEntity> reader;
reader.setPageSize(PAGE_SIZE);

如果我将 PAGE_SIZE 定义为与数据库列一样大,则性能等于 12 秒。但如果我将大小设置为较低的值(例如,在 1.000.000 个数据行数据库上将 pagesize = 100.000),性能会非常差(大约长 10 倍)。

Spring-batch 在后台对查询应用特定的分页。它的作用是什么:

query.setFirstResult();
query.setMaxResult();

如果页面大小为10,则执行的查询如下:

    firstResult, maxResult
0, 10
10, 10
20, 10
30, 10...

这再次转换为 SQL 中的 LIMITOFFSET

问题:SELECT DISTINCT ON 不能与分页 LIMIT/OFFSET 结合使用吗?对我来说,好像在每次“分页”运行时再次执行完整的选择不同查询,因此持续很长时间。

那么,如果数据库必须在应用 maxresults 之前进行完整的不同选择,我可以临时保存“不同”选择并只获取下一页吗?

如何改进这一点,而不必将分页大小设置为 100 万。或者这里不可能改进?

最佳答案

如果您不使用多个线程来处理此问题,则另一种方法是使用 JdbcCusorItemReader。这样您就根本不需要优化查询的分页方面。如果您使用多线程,则这不是一个选项。

关于java - 如何优化 SELECT DISTINCT sql 的分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com