帮忙优化一个SQL,急。。

tandy_cs_201 2007-06-13 10:13:27
select f.ssfd_bill_code,
max(cv.chnname) chnname,
max(nvl(ssem_soc_flag, 'N')) ssem_soc_flag,
max(nvl(ssem_soc_copy_flag, 'N')) ssem_soc_copy_flag,
max(scav.scas_create_time) scaa_create_time
from a em,
b scav,
c cv,
d f
where f.ssfd_fee_id = scav.scaa_fee_id(+) and
f.ssfd_manifest_id = em.ssem_exp_bl_id and
nvl(f.ssfd_bl_code, '0') < 'ZZZZZZZZZZZZZZZZZZZZ' and
f.ssfd_org_id = '530' and
em.ssem_carrier_id = cv.accountnumber
group by f.ssfd_bill_code


因为a,b,c,d表都是过百W条记录,所以这样肯定慢,我想把子表放到select部分,谁能帮忙解决就立马给分
...全文
314 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
1982dragon 2007-06-18
  • 打赏
  • 举报
回复
1,建立索引
2,f.ssfd_org_id = '530'
and nvl(f.ssfd_bl_code, '0') < 'ZZZZZZZZZZZZZZZZZZZZ'
and em.ssem_carrier_id = cv.accountnumber
放在WHERE后面,他可以先筛选一次
onemetre 2007-06-15
  • 打赏
  • 举报
回复
按照常规建立表和索引
记录不算多,效率不会影响太大的
CathySun118 2007-06-15
  • 打赏
  • 举报
回复
百W条记录,不会很慢的,如果你的索引建立比较好的话
tandy_cs_201 2007-06-14
  • 打赏
  • 举报
回复
问下,如果a表的A字段是b表的外键,那A字段的值是不是肯定不为空
tandy_cs_201 2007-06-14
  • 打赏
  • 举报
回复
TO DragonBill:1,3,5步分别怎么做
yuyu1980 2007-06-13
  • 打赏
  • 举报
回复
数据库是9i吗?
elect f.ssfd_bill_code,
max(select cv.chnname from c cv where cv.accountnumber = em.ssem_carrier_id ) chnname,
max(nvl(ssem_soc_flag, 'N')) ssem_soc_flag,
max(nvl(ssem_soc_copy_flag, 'N')) ssem_soc_copy_flag,
max(select scav.scas_create_time from b scav where f.ssfd_fee_id = scav.scaa_fee_id) scaa_create_time
from a em,
d f
where f.ssfd_manifest_id = em.ssem_exp_bl_id and
nvl(f.ssfd_bl_code, '0') < 'ZZZZZZZZZZZZZZZZZZZZ' and
f.ssfd_org_id = '530'
group by f.ssfd_bill_code
icefirelxb 2007-06-13
  • 打赏
  • 举报
回复
select f.ssfd_bill_code,
max(cv.chnname) chnname,
max(nvl(ssem_soc_flag, 'N')) ssem_soc_flag,
max(nvl(ssem_soc_copy_flag, 'N')) ssem_soc_copy_flag,
max(scav.scas_create_time) scaa_create_time
from a em,
b scav,
c cv,
( SELECT * from d where nvl(ssfd_bl_code, '0') < 'ZZZZZZZZZZZZZZZZZZZZ' and
ssfd_org_id = '530' ) f
where f.ssfd_fee_id = scav.scaa_fee_id(+) and
f.ssfd_manifest_id = em.ssem_exp_bl_id and
em.ssem_carrier_id = cv.accountnumber
group by f.ssfd_bill_code
不过估计也不会太明显,主要需要优化表,检查相关字段是否都建了索引
hongqi162 2007-06-13
  • 打赏
  • 举报
回复
相关表的查询字段都建立索引,个人感觉查询基本上也就这个样子了,数据量在那里呢,再快能快到哪里去
DragonBill 2007-06-13
  • 打赏
  • 举报
回复
1, ABCD表建成分区表
2, where条件中查询字段建index
3, nvl(f.ssfd_bl_code, '0')建index
4, f.ssfd_org_id = '530' 放在where最前面
4, SQL写法明显不对, 改进SQL

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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