我想優化下面的SQL,但我的SQL優化知識是相當綠色的,我沒有取得多大進展(我概括了列和其他標識符由於公司策略)在當前狀態下,此SQL根據負載運行1到2分鐘之間的任何時間。 VKTINFO表包含約100萬條記錄,GNTINFO表包含約300萬條記錄。通常情況下,如果這是一個批處理過程,1-2分鐘不會有什麼大不了的,但是我們有代理需要這些信息,並儘可能快地生效 - 更糟糕的是,我們的系統最終超時並返回一個錯誤用戶。但是,不能延長超時窗口。我們還有其他標準可以根據名字,郵政編碼,帳戶類型,帳戶狀態等等,但是當執行如下的廣泛搜索時,查詢變得相當慢。需要幫助優化非常慢的DB2 SQL查詢觸及數百萬條記錄
如果有任何關於如何操縱這個SQL來加速select的建議/技巧,我將不勝感激關於此事的任何想法。如果需要更多信息,我會很樂意儘可能提供符合我們公司政策的信息。
編輯: 這裏要求的是VKTINFO和GNTINFO表的索引。
- ACCOUNT_NUMBER
- 到期日期
- EFFECTIVE_DATE
指標爲gnt_account_info和vkt_account_info:
- pi_account_num
- pi_policy_num_gid
指數爲gntnad和vktnad表:
- nad_account_number
- nad_name_type
指數爲gntpolrf和vktpolrf表:
- xrf_account_number
select
processing_system,
total_premium,
quote_by,
email_address,
account_number,
expiration_date,
account_state,
xrf_file,
customer_name
from
(
select
'ABCD' as processing_system,
total_premium,
quote_by,
email_address,
account_number,
expiration_date,
account_state,
xrf_file,
customer_name
from vktinfo
left outer join vkt_account_info on account_number = pi_account_number
left outer join vktpolrf on account_number = xrf_account_number
left outer join VKTNAD on account_number = nad_account_number
and history_expiration_date=nad_history_expiration_date
and nad_name_type='HA'
WHERE effective_date >= '2013-02-01'
AND effective_date <= '2013-02-28'
AND customer_name like '_SMITH%'
AND account_state = 'South Carolina'
union all
select
'EFGH' as processing_system,
total_premium,
quote_by,
email_address,
account_number,
expiration_date,
account_state,
xrf_file,
customer_name
from gntinfo
left outer join gnt_account_info on account_number = pi_account_number
left outer join vktpolrf on account_number = xrf_account_number
left outer join GNTNAD on account_number = nad_account_number
and history_expiration_date=nad_history_expiration_date
and nad_name_type='HA'
WHERE effective_date >= '2013-02-01'
AND effective_date <= '2013-02-28'
AND customer_name like '_SMITH%'
AND account_state = 'South Carolina'
)
a
order by customer_name ASC fetch first 1000 rows only WITH UR
請發佈(添加到問題)你有什麼索引。 – 2013-02-28 21:28:08
這不會解決您的問題,但我建議在您的連接前加上 – 2013-02-28 21:32:53
您可以將執行計劃粘貼到您的問題中嗎?聯合SELECT語句中的WHERE子句是相同的;值得*測試*優化器是否會通過從子查詢中切下兩個WHERE子句並將其中一個子元素粘貼到外部查詢中來做出更好的決策。但首先看執行計劃。 – 2013-02-28 21:42:49