oracle 中的or 到底走不走索引,inner join ,left join ,merge join

本文探讨了数据库查询优化中的索引使用和JOIN操作。在涉及OR条件的查询中,索引可能仍然有效。MergeJoin需要排序,适合已排序的数据,而HashJoin通常更高效。对于小规模数据,NestedLoop连接可能是优选。LEFT JOIN和INNER JOIN在符合条件时也会利用索引。正确的JOIN顺序和策略对于提高查询性能至关重要。

看具体情况,有的情况下走,有的情况不走。

merge join

-- 有表t1plcbase 和t1isd ,plcno都是这两个表的索引
-- 你觉得下面的or走索引么?

select* from t1plcbase x,t1isd y where x.plcno=y.plcno and  x.plcno = '2021120106294500019728' or x.plcno = '2021120106294500019728' ;

--看执行计划,里面cost 284593 。cost可以理解为成本,值越大成本越高。
CBO(cost based Optimizer)评估每种不同的执行路径,执行消耗成本最低的获胜。
这里的cost可以理解为评估后的结果。
oracle 中select * from a,b 有人说a,b是inner join ,是不对的,
这种查询方式是生成笛卡尔积——它不使用任何匹配或者选取条件,
而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配

Merge Join 是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。

因为merge join需要做更多的排序,所以消耗的资源更多。 通常来讲,能够使用merge join的地方,hash join都可以发挥更好的性能,即散列连接的效果都比排序合并连接要好。然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。

可以使用USE_MERGE(table_name1 table_name2)来强制使用排序合并连接
Cartesian 笛卡尔积

select* from t1plcbase x,t1isd y where x.plcno=y.plcno  如果单执行这句,是hash join

<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值