我对 SQL 中的快捷方式不太了解,所以我希望利用这里的智慧来帮助加快我正在使用的查询。我目前正在使用 Oracle 8i。
我有一个查询:
SELECT
NAME_CODE, ACTIVITY_CODE, GPS_CODE
FROM
(SELECT
a.NAME_CODE, b.ACTIVITY_CODE, a.GPS_CODE,
ROW_NUMBER() OVER (PARTITION BY a.GPS_DATE ORDER BY b.ACTIVITY_DATE DESC) AS RN
FROM GPS_TABLE a, ACTIVITY_TABLE b
WHERE a.NAME_CODE = b.NAME_CODE
AND a.GPS_DATE >= b.ACTIVITY_DATE
AND TRUNC(a.GPS_DATE) > TRUNC(SYSDATE) - 2)
WHERE
RN = 1
这大约需要 7 分钟或 10 秒来运行。
现在GPS_TABLE
是 6.586.429 行,并且随着新的 GPS 坐标被输入系统而继续增长,每天它在 6 列中增长约 8.000 行。
当前ACTIVITY_TABLE
为 1.989.093 行,并且随着新活动进入系统而继续增长,每天它在 31 列中增长约 2.000 行。
所以总而言之,这些都不是小表,我知道运行这个或类似的查询总会有时间。如您所见,我已经将其限制为仅过去 2 天的数据,但任何可以加快速度的东西都将不胜感激。