表A:a_id(pk), a_name, a_bid表B:b_id(pk), b_priority, b_weightness假设A的数据是B的20倍,B表200w数据,现在要取2w或5w B的记录,且要关联A(主要是取关联后a_name字段)sql:select * from
(select b_id,rownum as num from (select b_id from B order by b_priority desc,b_weightness desc) ) tmp,A a where tmp.b_id=a.a_bid and num<=50000问题:
rownum和order by在一起的时候,order by不是主键,就先取值再排序,就导致需要用上面的语句来解决问题但是在上述语句中,查询套查询,还要全表扫描,排序,根据假设的数据量,效率是不是很低有没有更好的办法达到要求呢
(select b_id,rownum as num from (select b_id from B order by b_priority desc,b_weightness desc) ) tmp,A a where tmp.b_id=a.a_bid and num<=50000问题:
rownum和order by在一起的时候,order by不是主键,就先取值再排序,就导致需要用上面的语句来解决问题但是在上述语句中,查询套查询,还要全表扫描,排序,根据假设的数据量,效率是不是很低有没有更好的办法达到要求呢
------------这种方式经测试在oracle中贼慢,但是db2中相当的快!
1. 取5万B表的记录
条件根据业务需求定,可使用临时表保存该结果集,以便使用空间换时间。
2. 使用第一步结果集关联A表,取到约100万记录。
记得A表的a_bid字段建立索引。