-1

以下の oracle sql クエリを調整できますか? このクエリは、データベースから行を取得するのに時間がかかります。

SELECT T.ACCUMULATORS_INFO ACCU_INFO, T.SUBSCR_NO service_internal_id, 
T.SUBSCR_NO_RESETS service_internal_id_resets, T.*,T.MTR_TYPE_ID MTR_TYPE, 
T.ACCOUNT_NO account_internal_id, T.MTR_SUB_TYPE_ID MTR_SUB_TYPE, 
T.FILE_ID EXTRACT_FILE_ID, T.UNIT_TYPE_ID unit_type, RCV2.ISO_CODE PREV_SUBSCRIBER_CURRENCY, 
T.MTR_SOURCE_ID MTR_SOURCE, RCV1.ISO_CODE SUBSCRIBER_CURRENCY 
FROM  MTR T 
LEFT OUTER JOIN RATE_CURRENCY_REF RCV1 ON (T.CURRENCY_CODE = RCV1.CURRENCY_CODE) 
LEFT OUTER JOIN RATE_CURRENCY_REF RCV2 ON (T.PREV_CURRENCY_CODE = RCV2.CURRENCY_CODE) 
WHERE (T.CURRENCY_CODE IS NULL OR RCV1.service_version_id = ?) AND 
(T.PREV_CURRENCY_CODE IS NULL OR RCV2.service_version_id = ?) AND 
T.mod_date BETWEEN ? AND ? AND T.subscr_no = ? AND 
T.subscr_no_resets = ? 
ORDER BY T.mod_date DESC

よろしく、チャンドラ

4

2 に答える 2

0

モデルとデータを知らずにクエリを最適化することは常に困難ですが、これは私が試みることです。

少なくとも にインデックスがあり、場合によっては に
rate_currency_ref (currency_code, service_version_id )
1 つあるはず
mtr (mod_date, subscr_no, subscr_no_resets)です。

また、クエリを調整して、追加の条件をLEFT JOINs に追加して、読みやすさを向上させます (そして、最適化を改善することもできます)。

SELECT T.ACCUMULATORS_INFO ACCU_INFO, T.SUBSCR_NO service_internal_id, 
  T.SUBSCR_NO_RESETS service_internal_id_resets, T.*,T.MTR_TYPE_ID MTR_TYPE, 
  T.ACCOUNT_NO account_internal_id, T.MTR_SUB_TYPE_ID MTR_SUB_TYPE, 
  T.FILE_ID EXTRACT_FILE_ID, T.UNIT_TYPE_ID unit_type, RCV2.ISO_CODE PREV_SUBSCRIBER_CURRENCY, 
  T.MTR_SOURCE_ID MTR_SOURCE, RCV1.ISO_CODE SUBSCRIBER_CURRENCY 
FROM MTR T 
LEFT OUTER JOIN RATE_CURRENCY_REF RCV1
     ON (T.CURRENCY_CODE = RCV1.CURRENCY_CODE AND RCV1.service_version_id = ?)
LEFT OUTER JOIN RATE_CURRENCY_REF RCV2
     ON (T.PREV_CURRENCY_CODE = RCV2.CURRENCY_CODE AND RCV2.service_version_id = ?)
WHERE
  T.mod_date BETWEEN ? AND ? AND T.subscr_no = ? AND 
  T.subscr_no_resets = ? 
ORDER BY T.mod_date DESC
于 2012-07-12T10:12:31.090 に答える