首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle 批次執行大量相似查詢:使用 PL/SQL 批次綁定與游標優化

     編輯:程式設計綜合問答

原始問題

10,000 條單獨 SELECT COUNT(...) 迴圈執行耗時 30 分鐘。

優化方案:單一分組查詢


SELECT
    f_l_u_lon, f_l_u_lat, s_l_u_lon, s_l_u_lat,
    COUNT(*) AS cnt
FROM T_BUSINESSHISTORY
WHERE ONTIME BETWEEN DATE '2013-01-01' AND DATE '2013-01-31' + 1 - 1/86400
  AND ONLON BETWEEN ... -- 所有經度範圍
  AND ONLAT BETWEEN ... -- 所有緯度範圍
  AND OFFLON BETWEEN ...
  AND OFFLAT BETWEEN ...
GROUP BY f_l_u_lon, f_l_u_lat, s_l_u_lon, s_l_u_lat;

效果

  • 將 10,000 次網路往返、解析、執行計劃產生合併為 **1 次**。
  • 利用索引 (ONTIME, ONLON, ONLAT, OFFLON, OFFLAT) 快速過濾。
  • 若結果集過大,可分批 FETCH FIRST 1000 ROWS ONLY。

PL/SQL 批次綁定(若必須逐條)


FORALL i IN 1..sqls.COUNT
    EXECUTE IMMEDIATE sqls(i) BULK COLLECT INTO results;

但**單一 GROUP BY 查詢**通常快 100 倍以上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved