接上篇 114-在oracle数据库表现不佳的SQL,在oceanbase上会怎么样,来看看测试结果-1
场景6: push_pred与row_number分析函数
select a.object_id,x.id,x.object_id,x.owner
from t1 a
left join
(select b.*
, row_number() over (partition by object_id order by id desc) as rn
from t10m b
)x
on a.object_id=x.object_id and x.rn=1
order by a.created desc
offset 0 rows fetch first 20 rows only
;
复制
oracle的表现(18.83秒):
(如果要得到好的表现, 需要hint的配合, 这就是优化需要做的事情. )
OB的表现(0.04秒):
场景7: not in与union
select count(*) from
t1 a
where object_id not in
(select object_id from t10m
union all
select object_id from t5m
);
复制
Oracle的表现:
预计要跑个把小时, 只能看看执行计划了:
(如果要想表现正常, 需要改写, 这就是优化需要做的事情)
OB执行时间1秒多, 这个表现才是正常的:
场景8: 连接消除
select count(*)
from t1 a
left join (select object_id,count(*) as cnt from t10m group by object_id)b
on a.object_id=b.object_id
;
复制
oracle的表现, 未能识别连接消除(2.49秒):
OB识别了这是一个可以消除的left join(1毫秒) :
场景9: 带过滤条件的最大/最小值
select max(object_id) from t10m where owner='SYS';
注: object_id字段上有索引;
复制
oracle的表现(1.2秒):
ob的表现(7毫秒):
场景10: exists里面包含非等值关联条件
select count(*)
FROM T10m a
WHERE EXISTS
(SELECT 1
FROM t1 b
WHERE b.object_name='TAB'
AND a.object_id = b.object_id
AND b.created>=a.created --------非等着关联条件
);
复制
oracle的表现(1.27秒):
OB的表现(0.062秒):
注:上面对比的执行时间不是很重要, 表越大,对比会更明显. 主要是看执行计划.
(未完待续)
文章转载自老虎刘谈oracle性能优化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家观点】罗敏:从理论到真实SQL,感受DeepSeek如何做性能优化
墨天轮编辑部
1238次阅读
2025-03-06 16:45:38
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1216次阅读
2025-03-13 11:40:53
2025年2月国产数据库中标情况一览:GoldenDB 3500+万!达梦近千万!
通讯员
846次阅读
2025-03-06 11:40:20
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
739次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
647次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
541次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
502次阅读
2025-03-05 00:42:34
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
437次阅读
2025-03-04 21:56:13
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
436次阅读
2025-03-13 14:38:19
【ORACLE】char类型和sql优化器发生的“错误”反应
DarkAthena
398次阅读
2025-03-04 23:05:01