是否可以将大表查询拆分为多个查询到表子集?

时间:2015-09-23 13:43:02

标签: sql oracle relational-database bigdata sql-tuning

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

我们有两种选择:

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

这种分离是否有意义?

是否依赖于查询结构?

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 数据库有多忙?这就是多少并行查询 跑?

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

    < / LI>
  2. 将较大的表分成多少个较小的表?

    原因:这里要考虑的一点是,如果一张大桌子被分开了 在几个小表中运行查询并在每个较小的表上运行查询,然后需要聚合各个结果。这可能需要一些时间,具体取决于查询。

  3. 正在执行查询类型

    原因:如果您正在运行对列具有过滤条件的查询,并根据该列的值划分大表,则可以根据查询条件跳过某些表,因此减少了产出时间

  4. 总体而言,在这种情况下,不要将大表分成较小的表,最好对表进行分区。范围分区可以在更大的表上使用,以加快查询执行速度。