【问题标题】:Is it faster to split an SQL select into multiple queries?将 SQL 选择拆分为多个查询是否更快?
【发布时间】:2013-11-18 12:29:31
【问题描述】:

一般来说,如果我需要从具有大量记录的单个表中检索信息,是主键限制多个查询并行执行更好,还是一个更好大选择?

例如如果我有下表,ERRORS,至少有 500 万行:

ERROR_NUM ERROR_CODE CREATION_DATE STATE ... 1 55 09.20.2013 德 2 23 09.21.2013 加利福尼亚州 3 55 09.21.2013 MI 4 24 09.22.2013 德 ... 5000000 67 11.18.2013 纽约

如果我需要每天获取每个州的错误等信息,最好只做一次 SELECT what_i_need FROM 错误,或者我应该将其拆分为:

SELECT what_i_need FROM errors WHERE error_num BETWEEN 1 AND 100000 SELECT what_i_need FROM errors WHERE error_num BETWEEN 100001 和 200000 ...ETC

然后在检索到数据后以编程方式组合?

【问题讨论】:

  • 在单个查询中执行此操作,但请确保您的表具有适当的索引,如果您需要按天查询,请在 CREATION_DATE 上创建索引。

标签: sql select parallel-processing sap


【解决方案1】:

使用单个SELECT 语句,确保表被正确索引并在数据库级别使用正确的分组运算符。索引和分组需要相互匹配——根据实际查询,DBMS 可能能够充分利用索引。像往常一样,测量,测量,测量。使用一组真实的测试数据(不仅大小相同,而且值分布相同!)并让系统在执行查询时编写 SQL 跟踪。然后分析结果,看看查询是否可以优化。尝试“水平”拆分查询通常不会加快速度,而且可能会使事情变得更糟,因为并行作业可能会相互“阻塞”,从而造成巨大的 I/O 消耗。

【讨论】:

    【解决方案2】:

    我会选择一个。通常,减慢速度的不是行数,而是列及其内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多