sql 优化

lanita 2011-10-10 09:12:52
有下面两个sql:
//查询出anz_client_account 表中cif_no, account_no重复的记录
select * from conv_data_ul_file_line fl
WHERE EXISTS (SELECT 1
FROM anz_client_account anz
WHERE EXISTS (SELECT 1
FROM anz_client_account aca
WHERE anz.cif_no = aca.cif_no
AND anz.account_no = aca.account_no
GROUP BY aca.cif_no, aca.account_no
HAVING COUNT(*) > 1)
AND fl.data_ul_file_line_oid = anz.data_ul_file_line_oid);

//查询出 anz_client_account表中cif_no从第五位到最后 不存在于client_info_ts表中cust_nbr字段
select * from conv_data_ul_file_line fl
WHERE EXISTS (SELECT 1
FROM anz_client_account anz
WHERE NOT EXISTS (SELECT 1 FROM client_info_ts ts WHERE ts.cust_nbr = substr(anz.cif_no, 5))
AND fl.data_ul_file_line_oid = anz.data_ul_file_line_oid);


这两个sql可进行优化?conv_data_ul_file_line,anz_client_account,client_info_ts中的数据非常多,以conv_data_ul_file_line中数据最多
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
luyun2011 2011-10-12
  • 打赏
  • 举报
回复
select * from conv_data_ul_file_line fl
WHERE NOT EXISTS (SELECT 1 FROM client_info_ts ts WHERE ts.cust_nbr =
substr(anz.cif_no, 5)
AND fl.data_ul_file_line_oid = anz.data_ul_file_line_oid;
lanita 2011-10-11
  • 打赏
  • 举报
回复
over ..PARTITION BY 这样的用法没用过。。要学习了
lanita 2011-10-10
  • 打赏
  • 举报
回复
能不能说得具体点啊。。。
我2我骄傲 2011-10-10
  • 打赏
  • 举报
回复
执行计划!
Rotel-刘志东 2011-10-10
  • 打赏
  • 举报
回复
优化是有先决条件的,是为了提高查询效率。还是减少磁盘的I/O操作。
具体要看一下执行计划了。
wylsy1 2011-10-10
  • 打赏
  • 举报
回复
1. SELECT *
FROM conv_data_ul_file_line t1
WHERE EXISTS (SELECT 1
FROM (SELECT t.data_ul_file_line_oid, SUM(1) over(PARTITION BY cif_no, account_no) AS sumcount FROM anz_client_account t) t2
WHERE t1.data_ul_file_line_oid = t2.data_ul_file_line_oid
AND t2.sumcount > 1);

2. 这个从语句上没什么好优化的,看记录,如果anz_client_account,client_info_ts中使用到的那几个字段重复的很多,可以先distinct一把再关联

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧