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;
(ONTIME, ONLON, ONLAT, OFFLON, OFFLAT) 快速過濾。FETCH FIRST 1000 ROWS ONLY。
FORALL i IN 1..sqls.COUNT
EXECUTE IMMEDIATE sqls(i) BULK COLLECT INTO results;
但**單一 GROUP BY 查詢**通常快 100 倍以上。