将巨大的 select 查询拆分成多个部分是否有意义?

Does it make sense to split a huge select query into parts?

其实是做高负载服务的公司的面试题。 例如,我们有一个 table,其中包含 1TB 的记录和主 b 树索引。 我们需要 select 5000 到 5000000 范围内的所有记录。 我们不能阻止整个数据库。数据库处于高负载状态。 将巨大的 select 查询拆分成

这样的部分是否有意义
select * from a where id > =5000 and id < 10000;
select * from a where id >= 10000 and id < 15000;
...

请帮我比较一下我们使用 Postgres 和 MySQL 时的行为。 select 所有必需的记录是否有其他最佳技术?

谢谢。

你的问题有很多未知数。首先,什么是table结构?此查询是否会使用任何 indexes ?

找出答案的最佳方法是运行一个执行计划并分析性能。

但是尝试一次检索这么多行似乎不太合理。该查询很可能会导致服务器负载过重 + RAM 消耗 + 可能使用临时文件。它可能会失败或超时。

然后结果集必须通过网络传输,而且它可能会很大。您必须评估数据集的大小,如果不深入了解 table 结构,我们无法猜测。

最大的问题是,为什么要检索这么多行,最终目标是什么?假设您有一个带有 datagridview 或类似东西的 GUI 应用程序。您不会一次显示 5 亿行,这会使应用程序崩溃。用户可能想要的是 分页 或使用某些过滤器搜索记录。也许你一次最多显示几百条记录。

你打算用这些记录做什么?