数据库大表查询优化经验
编辑
13
2024-10-19
背景
最近公司有个需求需要将两张数十亿级别的大表关联查询,通过指定的条件筛选出一些合适的数据并完成一些业务功能。
问题
- 客观因素某些表不能新增索引,导致在关联查询的时候无法走对应索引,查询效率极慢;
- 两张关联表极大,无法通过小表驱动大表的形式去优化效率;
- 存在跨库重复问题,无法通过现有方案去重解决;
- 表基数过大,有些条件虽然走索引,但是依然很缓慢。
已知的解决方案
最优解,使用大数据平台完成
利用公司已有的大数据平台,将所有机构库的相关表数据导入到平台中,然后开发大数据SQL,利用大数据平台将想要的数据通过制定的逻辑抽取、去重后,写入到新表中,然后通过异步同步的方式将新表的数据同步到数据库中,批处理代码再从新表中取出同步过来的数据,然后完成后续的业务动作。
拆分SQL(在用方案)
细化和拆分大表关联查询SQL,将查询SQL中的非必要条件去除,将一些可以放到业务层处理的逻辑也抽取出来,尽量减少SQL中的计算、强转等步骤,避免索引失效;
另外对于某些关联大表,可能没有对应条件的索引,但是表中某些组合索引却满足我们的条件,这时候如果数据库自动优化没有走相关索引,我们也可以通过走强制索引的方式提升查询效率。
总结
对于大表关联查询和SQL优化的方案还有很多,除了上述提到的两点,我们也可以通过索引固话、分库分表、大数据平台清洗数据等等方案优化数据库查询效率。
- 0
- 0
-
分享