在查询表数据时,如果记录的顺序对计算结果没有影响,则可以用多线程并行读取,从而更充分地利用系统资源,以达到提高效率的目的。
基于单表(单 SQL)并行取数前需要进行数据分段,尽量保证每个分段的数据量平均。分段参数尽量基于索引字段(如会员编号),数据量较大时效率明显提高。
下面按照索引字段会员编号 ID 进行分段,查询会员数据。
SQL 语句类似于:
select * from MEMBER where ID<=1000000;
select * from MEMBER where ID>1000000 and ID<= 2000000;
select * from MEMBER where ID>2000000 and ID<= 3000000;
集算器编写脚本demo.dfx:
A | B | C | |
1 | =connect("mysql") | / 连接数据库 | |
2 | =A1.query@x("select max(ID) tmax, min(ID) tmin from MEMBER") | / 查询 ID 最大值与最小值 | |
3 | >b=A2.tmin | >e=A2.tmax+1 | / 计算 ID 的端点 |
4 | >p=4 | =range(b, e+1, p) | / 将 ID 按范围分成 4 段 |