SQL 如何实现多表并行取数

本文介绍了如何利用SQL实现多表并行取数,以充分利用多CPU资源,提升数据获取速度。通过示例展示了集算器SPL脚本的使用,演示了如何并行处理SCORES成绩表和STUDENTS学生表,然后进行数据关联操作,从而提高查询效率。

一些 SQL 查询场景下可以通过多线程并行执行多条 SQL 进行取数,以利于多 CPU 优势,加快获取表数据的速度。

下面用多线程获取SCORES成绩表、STUDENTS学生表的数据后,通过 SCORES 的 STUDENTID 与学生记录进行关联操作。


SCORES:

CLASSSTUDENTIDSUBJECTSCORE
Class one1English84
Class one1Math77
Class one1PE69
Class one2English81
Class one2Math80
......

STUDENTS:

IDNAMEGENDERAGE
1EmilyF17
2ElizabethF16
3SeanM17
4LaurenF15
5MichaelM16
......

1. 集算器编写脚本demo.dfx:

ABC
1select * from SCORESselect * from STUDENTS/ 查询成绩表、学生表的 SQL
2fork [A1:B1]/ 以 SQL 为参数启动多线程
3=connect("hsql")/ 连接数据库
4=B3.query@x(A2)/ 每个线程执行 SQL 查询数据将结果返回到 A2 格
5>SCORES=A2(1)>STUDENTS=A2(2)/ 获取查询结果
6=SCORES.switch@i(STUDENTID, STUDENTS:ID)/ 将 SCORES 中的 STUDENTID 字段值转化为对应的学生记录
7=A6.new(CLASS, STUDENTS.NAME, STUDENTS. AGE, STUDENTS.GENDER, SUBJECT, SCORE)/ 提取学生成绩数据组成序表

2. 调试运行,可看到 A6 格值:

CLASSSTUDENTIDSUBJECTSCORE
Class one[1,Emily,F ,17]English84
Class one[1,Emily,F ,17]Math77
Class one[1,Emily,F ,17]PE69
Class one[2, Elizabeth,F,16]English81
Class one[2, Elizabeth,F,16]Math80
......

3. 执行脚本返回结果(A7):

CLASSNAMEAGEGENDERSUBJECTSCORE
Class oneMichael16MEnglish72
Class oneMichael16MMath60
Class oneMichael16MPE91
Class oneJohn13MEnglish90
Class oneJohn13MMath69
......

Java 中调用这段脚本:

public static void doWork() { 
    Connection con =  null; 
    java.sql.Statement st; 
try{ 
        Class.forName("com.esproc.jdbc.InternalDriver"); 
        con = DriverManager.getConnection("jdbc:esproc:local://");   
        // 调用脚本 demo.dfx 
        st=con.createStatement();   
        ResultSet rst = st.executeQuery("call demo"); 
       System.out.println(rst); 
    } catch(Exception e){ 
        System.out.println(e); 
    } finally{ 
        // 关闭连接 
if (con!= null) { 
try { 
                con.close(); 
            } catch(Exception e) { 
                System.out.println(e); 
            } 
        }    
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值