1. 程式人生 > >oracle 的分頁查詢

oracle 的分頁查詢

不能 strong rac 每次 例如 依據 back str 數據

oracle 分頁查詢

需求:從黃石車管所的備案庫中(oracle)取出數據,放到車綜大數據平臺(http方式)

現場情況:oracle中有三張表,CZRKXX(常住人口信息),ZDRYXX(重點人員信息),ZPXX(照片信息)

  這三張表,字段超級多,沒有主鍵,只選取了需要展示的字段,以 CZRKXX 表做左連接查詢,大約是 500W 條數據,每次取500條

實現方式:多進程,多線程,增量獲取

  由於沒有索引,表的創建時間,更新時間字段不能作為依據,所以用到分頁

  增量的實現:每次讀取後,將索引變量增加一定區間大小,然後存儲到文件中(數據庫也行),為的是在程序掛掉時,再次開啟可以繼續從中斷的地方開始讀取

  單核 CPU 保持在 20 線程左右

連接查詢SQL:{} 中填充數據的索引值

  例如:ROWNUM <= 500, ... UA.RN > 0, 取到的是索引為 1 ~ 500 的記錄,RN 是記錄的索引值

query_sql = """SELECT * FROM 
                (SELECT ROWNUM RN, Z.ZDRKBH, Z.ZDRYLBDM, Z.XM, Z.XMHYPY, Z.CSRQ, Z.HJDZ_JYQK, 
                Z.HJDZ_XZQHDM, Z.XZZ_XZQHDM, Z.XZZ_DZMC, Z.SC_XXRKSJ, Z.DXBH, Z.LADWJGDM, Z.ZJLASJ, Z.ZDRYLBXL, 
                Z.ZDRYYXXDM, Z.JLXZSJ, Z.JLBGSJ, Z.CJSJ, Z.SJCQSJ, Z.DM_ID, Z.SJRKSJ, Z.SJGXSJ, 
                C.GMSFHM, C.RYBH, C.XBDM, C.SG, C.XXDM, C.MZDM, C.ZJXYDM, C.HYZKDM, C.BYZKDM, C.ZYLBDM, C.ZY, C.JG_GJHDQDM, C.JG_XZQHDM, 
                C.CSD_GJHDQDM, C.CSD_XZQHDM, C.CSD_DZMC, C.HJDZ_DZMC, C.FWCS, C.SFZX_PDBZ, 
                P.ZP
                
FROM (CZRKXX C LEFT JOIN ZDRYXX Z ON C.GMSFHM=Z.GMSFHM) LEFT JOIN ZPXX P ON Z.GMSFHM=P.GMSFHM WHERE ROWNUM <= {}) UA WHERE UA.RN > {} """

單表查詢SQL:

  兩條 sql 分頁的邏輯是一樣的

"""select * from (select P.GMSFHM, P.ZP, ROWNUM RN from hsjj.ZPXX P where ROWNUM <=
{}) UA where UA.RN > {}"""

oracle 的分頁查詢