0

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

我们有两个选择:

  • 查询整个表
  • 查询表内的数据子集,即从 1 到 1000 的行,然后是 1001 到 2000 等的行。

这种分离有意义吗?

它取决于查询结构吗?

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

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

此外,数据库的连接数和并发性可能会受到限制,因此我们将无法同时通过 10 个查询来查询它,例如,至少以相同的速度。

但这些理由有意义吗?这可能有助于减少一些大桌子的时间费用吗?

4

1 回答 1

0

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

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

    原因: 如果有大量查询正在运行或任何具有多个并行会话的查询,那么在大表上查询会很慢,而在较小的表上会运行得更快。

  2. 大桌子分成几张小桌子?

    原因: 这里要考虑的一点是,如果将一个大表分成几个小表并在每个较小的表上运行查询,则需要汇总各个结果。这可能需要一些时间,具体取决于查询。

  3. 正在执行的查询类型

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

总体而言,在这种情况下,最好对表进行分区,而不是将大表分成较小的表。Range Partition 可用于更大的表以更快地执行查询。

于 2015-09-23T14:51:19.350 回答