查询优化问题一

问题的原因比较清楚:

我其实是2个表关联查询:订单产品表(A)-->订单表(B)

其中A表中有350多万记录  B表中有15万记录

我的sql大概是这样

select * from (

select  * from A a, B b

where

a.orderId=b.id

and b.f1 =1000 --- 查询条件

and b.f2=2000 ---查询条件

order by a.created_dt

) where rownum<100

注意红色的内容:

红色的内容是两个条件,已经给这两个建了一个索引,两个字段的联合索引

这个sql 执行是 150秒左右

如果去掉红色部分,那么就是

select * from (

select  * from A a, B b

where

a.orderId=b.id

order by a.created_dt

) where rownum<100

这个语句是1.7秒左右

如果去掉order by

select * from (

select  * from A a, B b

where

a.orderId=b.id

and b.f1 =1000 --- 查询条件

and b.f2=2000 ---查询条件

) where rownum<100

那么速度是1.1秒左右

可是条件和orderby都是必须的,order by 上面也有索引,可是在上面3种查询中explain 都不曾用到。

---------------------------------

问题如上:

感谢阮容,帮助分析并最终解决此问题。

select * from (

select  * from A a, B b

where

a.orderId=b.id

and b.f1 =1000 --- 查询条件

and b.f2=2000 ---查询条件

order by a.created_dt

) where rownum<100

之前已经说过A表是大表,200多万记录,B表是小表 15万记录,执行计划显示A表的的全表扫描没有使用索引,经查看两表关联a.orderId=b.id的地方orderId竟无索引,因此新建了一个索引在A表的orderid上。

原先150秒的sql现在一下子变成1秒了

感谢大家。

 

本贴来源:

http://www.oschina.net/bbs/thread/13504?p=2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值