我想优化下面的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