私は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日間分のデータに制限していますが、それを高速化するために何かをいただければ幸いです。