背景
接到一个报表优化的需求,该sql inner join了两张表,主表中数据大概是三千万,经测试,查询2023-07-01这一天的数据需要12秒,查询2023-07-01~2023-07-31 却只需要1.1秒,查询2024-07-01需要20分钟,查询速度极其不稳定。如果单独查主表 where里面写死查询条件,需要0.28秒
解决办法
该sql改为单表查询,通过group的方式进行分组,减少报表所需要处理的数据量,然后将原本的关联表在报表中进行过滤或者字典翻译达到以前的效果
总结
当数据量大查询慢时,可以尝试下单表查的速度,如果单表查速度很快,那就想想现在的这个功能能不能改为单表查后通过Java代码或者其他对数据库返回的结果集进行筛选。
吐槽
看很多面试题呀,或者什么别人分享的方法啊,都是在找数据库的问题,以及索引是否失效啊。有些时候也要想想是不是自己的sql写的有问题,既然单表查的时候数据库性能这么好,那我们就想想能不能将业务转为单表查,然后拼接
而外收获
排查这个问题时,知道了Oracle 的hint,用来提高查询效率,附讲解链接
https://blog.csdn.net/qq_40588579/article/details/103085575