昔年浅巷

昔年浅巷

数据库大表查询优化经验

13
2024-10-19

背景

最近公司有个需求需要将两张数十亿级别的大表关联查询,通过指定的条件筛选出一些合适的数据并完成一些业务功能。

问题

  • 客观因素某些表不能新增索引,导致在关联查询的时候无法走对应索引,查询效率极慢;
  • 两张关联表极大,无法通过小表驱动大表的形式去优化效率;
  • 存在跨库重复问题,无法通过现有方案去重解决;
  • 表基数过大,有些条件虽然走索引,但是依然很缓慢。

已知的解决方案

最优解,使用大数据平台完成

利用公司已有的大数据平台,将所有机构库的相关表数据导入到平台中,然后开发大数据SQL,利用大数据平台将想要的数据通过制定的逻辑抽取、去重后,写入到新表中,然后通过异步同步的方式将新表的数据同步到数据库中,批处理代码再从新表中取出同步过来的数据,然后完成后续的业务动作。

拆分SQL(在用方案)

细化和拆分大表关联查询SQL,将查询SQL中的非必要条件去除,将一些可以放到业务层处理的逻辑也抽取出来,尽量减少SQL中的计算、强转等步骤,避免索引失效;

另外对于某些关联大表,可能没有对应条件的索引,但是表中某些组合索引却满足我们的条件,这时候如果数据库自动优化没有走相关索引,我们也可以通过走强制索引的方式提升查询效率。

总结

对于大表关联查询和SQL优化的方案还有很多,除了上述提到的两点,我们也可以通过索引固话、分库分表、大数据平台清洗数据等等方案优化数据库查询效率。