私はSQLのショートカットに精通していないので、ここでの頭脳を活用して、使用しているクエリを高速化することを望んでいました。現在、Oracle8iを使用しています。
質問があります:
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日間分のデータに制限していますが、それを高速化するために何かをいただければ幸いです。