住所と郵便番号フィールドの数字に基づいて、従業員と一致する住所を持つベンダーを見つけるためにこれを作成しましたが、非常に遅い. クエリは、すべてのテキストを取り除き、数字を従業員テーブルからベンダー テーブルに結合します。
クエリのパフォーマンスを向上させる方法はありますか?
SELECT
T1.EMPLID, T1.NAME, T1.ADDRESS1, T1.ADDRESS2, T1.ADDRESS3, T1.ADDRESS4, T1.CITY,
T2.VENDOR_ID, T3.NAME1, T2.ADDRESS1, T2.ADDRESS2, T2.ADDRESS3, T2.ADDRESS4, T2.CITY
FROM PS_PERSONAL_DATA T1
JOIN PS_VENDOR_ADDR T2
ON
TRANSLATE(T1.ADDRESS1, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-#./ ,',' ') ||
TRANSLATE(T1.ADDRESS2, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-#./ ,',' ') ||
SUBSTR(T2.POSTAL,0,5) =
TRANSLATE(T2.ADDRESS1, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-#./ ,',' ') ||
TRANSLATE(T2.ADDRESS2, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-#./ ,',' ') ||
SUBSTR(T2.POSTAL,0,5)
JOIN PS_VENDOR T3
ON T2.VENDOR_ID = T3.VENDOR_ID
WHERE T1.EMPLID <> T2.VENDOR_ID
AND
TRANSLATE(T1.ADDRESS1, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-#./ ,',' ') ||
TRANSLATE(T1.ADDRESS2, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-#./ ,',' ') ||
SUBSTR(T2.POSTAL,0,5) NOT LIKE ' '
AND T2.VENDOR_ID IN
(
SELECT VENDOR_ID
FROM PS_VOUCHER
WHERE PROCESS_INSTANCE <> 0
AND POST_STATUS_AP LIKE 'P'
AND VENDOR_ID NOT IN
(
'0000003730',
'0000003318',
'0000003555',
'0000002422',
'0000003458',
'0000001089',
'0000001450',
'0000003809',
'0000003255',
'0000001903'
)
HAVING SUM(GROSS_AMT) > 5000 AND COUNT(VENDOR_ID) > 2
GROUP BY VENDOR_ID
)
;