当前位置 : 首页 > 文章 > 国产数据库SQL优化案例分享

国产数据库SQL优化案例分享

来源:辣条科技站Gamer发布时间: 2024-04-20 16:00:13


在OB工作期间,尚未接触到金融领域的SQL优化案例,只能分享其他行业的数据库SQL优化案例。


最近接手的案例是一个传统行业的SQL,表设计未遵循三范式规范,显得非常奇葩。


医疗、交通、能源等传统行业的业务设计,SQL语句十分奇葩,具有一定挑战性,也颇具趣味。


慢SQL:


执行时间:


执行计划(个人理解能力有限,暂不深究):


表数据量:


上述SQL运行时间为28秒,返回8行数据,速度较慢。


数据库管理员表示已经使用HINT对SQL进行整体优化,但仍需12秒才能运行完毕,客户不满意,因此寻求其他解决方案。


加HINT优化方案:


加HINT后执行计划:


HINT执行时间:


12秒相较于原来的28秒已经有了显著提升,但客户表示不满意:Oracle数据库可以在一秒内返回结果,而在达梦数据库中执行时间却多了12倍,难以接受。


面对此情况,最终找到专家寻求帮助,以期让该SQL能够“秒出结果”。


初步观察后发现,加索引和使用HINT并不能有效改善性能,唯有进行等价改写,并创建合适的索引,使得该SQL能够使用新的索引进行查询。


等价改写+索引优化方案:


优化后执行计划:


执行时间:


通过改写和创建索引进行优化后,该SQL能够像Oracle数据库一样“秒出结果”。


堆表和索引组织表的区别很大,对于一些老系统,业务SQL编写不佳,使用堆表并无大碍,而Oracle的CBO算法能够抵御这些问题。


然而,当前许多国产数据库使用索引组织表(如OB、DM、TIDB等国产数据库),老系统中的业务设计较为随意,且很多业务逻辑都实现在数据库层面,这导致了许多性能问题:


Oracle的索引迁移到国产数据库后,性能却下降明显,无法充分利用原有的索引等问题层出不穷。


要进行国产化适配改造,并非仅满足数据库功能和特性上的实现,还需要对业务模型进行整体调整。


感谢各位读者同学的阅读,如有奇葩SQL问题,欢迎联系我。?