将SQL select拆分成多个查询会更快吗?

时间:2013-11-18 12:29:31

标签: sql select parallel-processing sap

一般来说,如果我需要从具有大量记录的单个表中检索信息,那么最好是通过主键限制并并行执行的多个查询,或者更好地将其作为一个大选?

E.g。如果我有下表,ERRORS,至少有500万行:

ERROR_NUM ERROR_CODE    CREATION_DATE  STATE ...
1         55            09.20.2013     DE
2         23            09.21.2013     CA
3         55            09.21.2013     MI 
4         24            09.22.2013     DE
...
5000000   67            11.18.2013     NY

如果我需要获取每天每个州的错误等信息,那么做一个单身是否更好 SELECT what_i_need FROM errors,或者我应该将其拆分为:

SELECT what_i_need FROM errors WHERE error_num BETWEEN 1 AND 100000
SELECT what_i_need FROM errors WHERE error_num BETWEEN 100001 and 200000
...etc

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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