将大 table 查询拆分为多个 table 子集的查询是否有意义?

Does it make sence to split big table querying into several queries to table subsets?

鉴于我们在关系数据库中有一个很大的table,我们需要查询。

我们有两个选择:

这种分离有意义吗?

是否取决于查询结构?

让我们添加一些数学运算。给定一些查询执行时间与 n^3 成正比,其中 n 是 table 中的行数。这意味着在第一种情况下查询执行时间与 n^3 成正比。至于第二个选项 - 它不同。总时间为 (n/3)^3 + (n/3)^3 + (n/3)^3 = n^3 / 9 哪个更好。

现实生活更复杂:在这种情况下查询将不一样,我们必须花一些时间将行限制为子集。

也可以限制数据库的连接数和并发数,这样我们就不能同时查询10个查询,至少速度是一样的。

但是这些理由有道理吗?这可能有助于减少一些大型 table 的时间开支吗?

这取决于很多标准。其中一些是:

  1. 数据库有多忙?那就是有多少并行查询 运行宁?

    原因:如果有大量的query 运行ning或者任何有多个parallel session的query那么查询就大了table会很慢,而较小的会工作得更快。

  2. 小的table大的table分成了多少个?

    原因:这里要考虑的一点是如果一个大的table被分割 分成几个小的 tables 和 运行 对每个较小的 tables 的查询,然后需要汇总各个结果。这可能需要一些时间,具体取决于查询。

  3. 正在执行查询类型

    原因 : 如果您 运行 查询对某列具有过滤条件,并且您根据该列的值划分大 table ,那么可以根据查询条件跳过一些table,从而减少输出

  4. 的时间

总的来说,在这种情况下,与其将大的 table 分成较小的部分,不如 将 table 分区。范围分区可用于更大的 table 以加快查询执行速度。