将一个巨大的select查询拆分为多个部分有意义吗?

anauzrmj  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(321)

实际上,这是一个关于一家提供高负荷服务的公司的面试问题。例如,我们有一个表,表中有1tb的记录,表中有主b树索引。我们需要选择5000到5000000之间的所有记录。我们不能封锁整个数据库。数据库处于高负载状态。将一个巨大的select查询拆分为以下部分有意义吗

select * from a where id > =5000 and id < 10000;
select * from a where id >= 10000 and id < 15000;
...

请帮我比较一下使用postgres和mysql时的行为。有没有其他最佳技术来选择所有需要的记录?
谢谢。

62lalag4

62lalag41#

你的问题有许多未知数。首先,什么是表结构?这个查询会使用任何索引吗?
最好的方法是运行执行计划并分析性能。
但是试图在一次传递中检索这么多行似乎不太合理。这个查询很可能会导致服务器负载过重+内存消耗+临时文件的使用。它可能会失败或超时。
然后结果集必须在网络上传播,它可能是巨大的。您必须评估数据集的大小,如果不深入了解表结构,我们就无法猜测。
最大的问题是,为什么要检索这么多行,最终目标是什么?假设您有一个带有datagridview之类的gui应用程序。您不会一次显示5亿行,这会使应用程序崩溃。用户可能希望使用一些过滤器对记录进行分页或搜索。也许你一次最多能显示几百张唱片。
你打算怎么处理这些记录?

相关问题