oracle 的分頁查詢
阿新 • • 發佈:2019-04-29
不能 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.ZPFROM (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 的分頁查詢