永发信息网

两表连接索引失效

答案:2  悬赏:40  手机版
解决时间 2021-02-14 06:59
我是在测试环境测的,实际生产环境中oa_flow_sign表有70万条数据,可还是走的全表扫描.

select count(*)
from oa_flow_sign fs, OA_APPROVE_TASK a
where fs.task_id = a.task_id
and fs.is_valid = 'Y'
and fs.sign_status = '1';

其中OA_APPROVE_TASK表的task_id建立了unique索引。
oa_flow_sign表没有关于task_id的索引,我建立了normal索引然后关联查询,可oa_flow_sign表还是走的全表扫描,为什么呢?

问题已经解决,是因为表数据太少,增加十万条数据后走索引了。了解了下是因为oracle查询很智能,原先测试环境表里只有61条数据,所以走全表扫描会更快。
最佳答案
EXISTS、IN与JOIN,都可以用来实现形如“查询A表中在(或不在)B表中的记录”的查询逻辑。在查询的两个表大小相当的情况下,3种查询方式的执行时间通常是:EXISTS<=IN<=JOINNOTEXISTS<=NOTIN<=LEFTJOIN只有当表中字段允许NULL时,NOTIN的方式最慢:NOTEXISTS<=LEFTJOIN<=NOTIN但是如果两个表中一个较小,一个较大,则子查询表大的用exists,子查询表小的用in,因为in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。而无论那个表大,用notexists都比notin要快。这是因为如果查询语句使用了notin那么内外表都进行全表扫描,没有用到索引;而notextsts的子查询依然能用到表上的索引。IN的好处是逻辑直观简单(通常是独立子查询);缺点是只能判断单字段,并且当NOTIN时效率较低,而且NULL会导致不想要的结果。EXISTS的好处是效率高,可以判断单字段和组合字段,并不受NULL的影响;缺点是逻辑稍微复杂(通常是相关子查询)。JOIN用在这种场合,往往是吃力不讨好。JOIN的用途是联接两个表,而不是判断一个表的记录是否在另一个表。
全部回答
就是正常现象,这是oracle新特性中的闪回功能。 oracle在删除表时并不是真正将表删除而是修改一个名字而已,然后可以用闪回命令来还原被删除的表。 具体查看oracle闪回的相关文章。这里我就不详细解释了!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
停车场(旺苍县物价局东南)地址好找么,我有些
呼和浩特机床附件总厂四分厂在哪里啊,我有事
番茄酱热破与冷破的区别
五岁男孩一发脾气就跑去角落躲起来哭怎么办
现在成人高考过了,想考小学教师资格证,就是
求一篇部网王文的名字,女主是冰帝女子网球部
How do you use the Internet?What do you do
nubia云网页版在哪?
停车场(青川县妇幼保健院北)地址在什么地方,
农村信用社白驿信用社这个地址在什么地方,我
以祖字开头的成语接龙有哪些
网购,显示卖家已发货,物流也能查到,到就显示
南河天作之城停车场地址在什么地方,想过去办
精艺不锈钢怎么去啊,有知道地址的么
广汇花园停车场(入口)地址在什么地方,我要处
推荐资讯
广汽传祺油电混合动力车上市了吗,各位车友有
梦到未来婆婆说自己长的胖
皇家金宝贝幼儿园(宿州埇桥区)地址在什么地方
长期跑步有什么改变
【works是什么意思】works是什么意思
but before the barbecue ling feels a littl
电路板L-L+什么意思
英语小短剧 短一点5 6人
卉卉风情鲜花婚庆怎么去啊,我要去那办事
斗地主王能管住什么?
【数字儿歌】数字儿歌有知道的吗?我女儿学了
韩剧the k2第一集14分27秒左右打斗时背景音乐
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?