14个join的select语句,头大!
能做性能优化修改的地方有以下几个:
1.where 和on条件中尽可能按照index顺序来排列条件,并且尽可能不在条件左边使用函数,比如substr可以用like 替代。如果非得使用函数,则把带有函数的条件排到后面。
2.按照业务逻辑能用inner join的地方不使用left join,这个语句有个地方inner join ls换成left join,时间要增加8倍!分别是30秒和240秒
3.join 后面的表尽可能不使用子查询
insert into bills
select
*--简化
from ixqdwdel d
inner join (select s.entity,s.deal_no,s.step_open_date,
nvl(nvl(s.offering_date,s.rel_date_b),s.rel_date_a) rel_date
from ixqdwstp s where s.entity=entity_c and s.step_id = 'ISS000'
and s.step_status='4') iss
on iss.entity=d.entity and iss.deal_no=d.deal_no
inner join ixqdwcna c --customer info
on d.customer_id=c.customer_id and d.entity=c.entity
inner join (select * from (select x.entity,x.currency_code,x.rate_1/10000000 rate,x.rate_2/10000000 rate2,
dense_rank() over (partition by x.entity,x.currency_code order by x.date_key) d,x.date_key
from ixqap098 x
where x.entity=entity_c ) a where a.d=1) x
on d.entity=x.entity and d.deal_curr=x.currency_code
left join (select * from
(select l.*,dense_rank() over(partition by l.deal_no order by substr(l.step_id,4,3) desc)seq
from ixqdwolc l where l.entity=entity_c) l where l.seq=1) l --LC/LG
on d.entity=l.entity and d.deal_no=l.deal_no
left join ixqdwicd i on d.deal_no=i.deal_no and d.entity=i.entity and i.step_id='ISS000'
left join ixqdwdpr p
on d.entity=p.entity and d.deal_no=p.deal_no and p.step_id='ISS000' and p.party_code='ISB'
left join ixqdwexs be
on p.party_id=be.party_id and be.entity=p.entity and p.party_ext=be.extension_no
left join ixqdwdpr rp
on d.entity=rp.entity and d.deal_no=rp.deal_no and rp.step_id='ISS000' and rp.party_code='RMB'
left join ixqdwexs ber
on rp.party_id=ber.party_id and ber.entity=rp.entity and rp.party_ext=ber.extension_no
left join (select * from (select s.*,dense_rank() over(partition by s.deal_no order by s.time_stamp desc) seq
from ixqdwstp s where s.entity=entity_c and s.step_status='4'
and (s.step_id like 'PAY%' or s.step_id like 'ACP%')) s where seq=1) doc
on d.entity=doc.entity and d.deal_no=doc.deal_no
inner join (select * from (select s.*,dense_rank() over(partition by s.deal_no order by s.time_stamp desc) seq
from ixqdwstp s where s.entity=entity_c and s.step_status='4') s where seq=1) ls
on d.entity=d.entity and d.deal_no=ls.deal_no
left join (select trim(ld.owner_id) owner_id,ld.limit_key,ld.limit_no,
ld.limit_categ_desc,ld.deal_no,ld.entity from (
select ld.*,lm001.limit_categ_desc,dense_rank()
over(partition by ld.entity,ld.deal_no order by ld.limit_key) seq from
ixqdwlde ld inner join ixqlm001 lm001
on ld.entity=lm001.entity and ld.limit_key=lm001.limit_categ_code
where ld.entity=entity_c and lm001.funded_unfunded='U'
) ld where seq=1 )lm
on d.entity=lm.entity and d.deal_no=lm.deal_no
left join ixqdwchg ch on d.entity=ch.entity and d.deal_no=ch.deal_no
and ch.entity=entity_c and (ch.charge_id like '90%1')
and ch.step_type ='ISS'
left join ixqap129 ap129--
on ch.entity=ap129.entity and ch.charge_id=ap129.debit_credit_id
and ch.charge_curr = ap129.currency_code
where d.entity=entity_c
and d.product in ('01','02','11','12')
and d.last_rel_step_id not like 'BKF%'
and length(trim(d.customer_id))=10
and translate(trim(d.customer_id),'\1234567890','\') is null
;
分享到:
相关推荐
Oracle的SQL优化是数据库管理中的关键任务,它旨在提高查询速度、降低资源消耗,从而提升整个系统的性能。以下是一些重要的优化策略: 1. **全表扫描与索引扫描**: - 全表扫描应尽量避免,尤其对于大数据量的表,...
以上介绍了关于SQL脚本优化的一些基本方法和技术要点,包括但不限于查询顺序的优化、WHERE子句的使用技巧、避免使用SELECT *、减少不必要的数据库调用、使用特定工具进行性能调优、利用ROWID进行删除操作、TRUNCATE...
SQL 执行效率优化需要从多方面入手,选择最有效率的表名顺序、Where 子句中的连接顺序、Select 子句中避免使用 ‘*’、减少访问数据库的次数、重设 ARRAYSIZE 参数、使用 DECODE 函数、整合简单、无关联的数据库访问...
以上仅是部分关于SQL语句优化的知识点,对于Oracle环境下的SQL优化还有很多细节需要关注,包括但不限于:合理使用提示(Hints)、优化GROUP BY操作、使用日期格式化、优化EXPORT和IMPORT操作、以及分离表和索引等。...
对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。 在多数情况下,Oracle使用索引来更快地遍...
- **优化表的关联顺序**: 在多表关联查询中,虽然MySQL会自动决定表的连接顺序,但在某些情况下,手动指定关联顺序可以进一步提高查询效率。 - **避免SELECT *操作**: 应尽量仅查询需要的列,减少数据传输量,提高...
5. **JOIN操作**:在处理多表关联时,JOIN是必不可少的。INNER JOIN返回两个表中匹配的记录,LEFT JOIN返回左表的所有记录及右表匹配的记录,RIGHT JOIN反之,FULL JOIN则返回所有记录。 6. **子查询**:子查询是在...
ORACLE 优化 SQL 语句提高 Oracle 执行效率 Oracle 是一个功能强大的关系数据库管理系统...因此,很少的资源被调用,执行时间也会减少。 通过遵循这些最佳实践,可以提高 Oracle 的执行效率,从而提高数据库的性能。
### Hibernate3性能优化方案 #### 一、抓取优化 抓取优化是针对Hibernate如何高效地处理对象之间的关联关系的一种优化方法。它主要包括两部分:如何抓取和何时抓取。 **1. 如何抓取** 抓取方式分为两种:JOIN...
1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + ...
查询所返回的结果集,通常查询返回的结果集很少,是有信心进行优化的; 第二.驱动表的选择至关重要,通过查看执行计划,可以看到优化器选择的驱动表,从执行计划中的rows可以大致反映出问题的所在; 第三.理清各...
LINQ to SQL通过乐观并发策略处理并发问题,即假设冲突很少发生,只有在保存更改时检查数据库的版本信息,如果发现有冲突,则回滚事务并抛出异常。开发者可以通过设置乐观并发策略,如使用`Timestamp`或`RowVersion`...
这两个表之间通过一个共同的字段,如"省份ID",建立关联,形成一对多的关系,即一个省份可以对应多个地级市。 下面我们将深入探讨相关的SQL知识点: 1. **表结构设计**: - **省份表**(例如:province)可能包含...
目前,大多数数据库管理系统(DBMS)支持SQL92标准,但很少有完全符合更现代的标准。 SQL的特点在于它的非过程化、综合统一的特性,可以实现数据定义(DDL)、数据操纵(DML)和数据控制(DCL)。DDL包括创建、删除...
数据库开发者需要仔细审视执行计划中的每一项信息,包括select_type、table、type、possible_keys、key、key_len、ref、rows、filtered等,这些信息对于深入理解SQL语句的执行方式、找出性能瓶颈至关重要。...
本文总结了 30 多条 Oracle 数据库优化的经验,涵盖了选择最有效率的表名顺序、WHERE 子句中的连接顺序、SELECT 子句中避免使用 ‘*‘、减少访问数据库的次数、使用 DECODE 函数来减少处理时间、整合简单、无关联的...
索引(INDEX)是提升查询性能的重要工具,理解B树和哈希索引的工作原理,以及如何创建和优化索引,对于数据库性能调优至关重要。 最后,事务(TRANSACTION)管理是确保数据一致性和完整性的关键。理解ACID(原子性...
4. 连接查询:在多表环境中,SQL的JOIN操作是必不可少的。教程会涵盖INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等连接类型,以及如何使用JOIN条件进行复杂的数据关联。 5. 子查询与嵌套查询:子查询是SQL...
通过这样的实践,你可以深入理解SQL语言的SELECT、INSERT、UPDATE、DELETE语句,以及WHERE、GROUP BY、HAVING、ORDER BY等子句的用法。同时,还能了解数据库设计的基本概念,如主键、外键和关系模型。这个简单的教务...