求教:SQL语句中Oracle如何使用Where子句中的索引

[复制链接]
查看11 | 回复1 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
请分析为何两个语句执行效率不一样:
语句一:
select ac010_.AAC001 as x0_0_, ab011_.AAB001 as x1_0_, kcb82_.AAC001 as x2_0_,kca93_.AAC001 as x3_0_, kca93_.AAE001 as x3_1_ from AB01 ab011_ , AC01 ac010_, KCB8 kcb82_, KCA9 kca93_ whereab011_.AAB001=ac010_.AAB001
andab011_.AAB001='01001602'
andac010_.AAC001=kcb82_.AAC001
and kcb82_.EKC101='0'
and ab011_.AAB001 = ac010_.AAB001
and ac010_.AAC001=kca93_.AAC001
and kca93_.AAE001=F_GETCHALKYEAR('2')
and kca93_.AKC021'00'
语句二:
select ac010_.AAC001 as x0_0_, ab011_.AAB001 as x1_0_, kcb82_.AAC001 as x2_0_
,kca93_.AAC001 as x3_0_, kca93_.AAE001 as x3_1_
from AB01 ab011_ , AC01 ac010_, KCB8 kcb82_, KCA9 kca93_
where
ab011_.AAB001=ac010_.AAB001
andab011_.AAB001='01001602'
andac010_.AAC001=kcb82_.AAC001
and kcb82_.EKC101='0'
and ac010_.AAC001=kca93_.AAC001
and kca93_.AAE001=F_GETCHALKYEAR('2')
and kca93_.AKC021'00'
语句二与语句一相比,仅仅少了一句ab011_.AAB001=ac010_.AAB001 且这个条件在语句一中重复写了一遍而已。语句一的解析代价是21,语句二的解析代价是390。
请问那位能解释这个问题?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
试试这个
select ac010_.AAC001 as x0_0_, ab011_.AAB001 as x1_0_, kcb82_.AAC001 as x2_0_,kca93_.AAC001 as x3_0_, kca93_.AAE001 as x3_1_ from AB01 ab011_ , AC01 ac010_, KCB8 kcb82_, KCA9 kca93_ where ab011_.AAB001='01001602'
and ac010_.AAC001=kcb82_.AAC001
and kcb82_.EKC101='0'
and ab011_.AAB001 = ac010_.AAB001
and ac010_.AAC001=kca93_.AAC001
and kca93_.AAE001=F_GETCHALKYEAR('2')
and kca93_.AKC021'00'
好像把能过滤掉最多数据的条件放在最后执行效率会比较高
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行