项目中MySQL数据库相关优化总结记录

    技术2022-07-11  92


    多读多写多记录,多学多练多思考。 --------- Banana.Banuit Gang(香柚帮)


    以下优化记录是在实际项目中所遇到的,有些性能还需要根据实际项目进行多次验证,所以仅仅是大香蕉的记录笔记,仅供参考

    1.多表关联

    在进行多表联查时我们使用了左连接left join,大表在左,小表在右,小表驱动大表 尝试在左边的表加了索引,但是没有效果,这是由左连接的特性决定的,left join 是明确左边表的数据肯定都有,从右边表进行查询数据,所以右边是关键,我们一定要加上索引 总结:记住一点,左连接加右表,右连接加到左表,小表驱动大表

     2.多表关联查询和拆分循环查询

    1.ABC三表关联一次性查询,只执行一条SQL语句(A是大表)

    2.A单表查询获得list,foreach遍历list,在遍历过程中通过外键id查询BC两表,执行2*n+1条SQL语句(n为list长度)

    总结:如果BC表的数据存储在缓存中的话,第二种拆分法相当于也是和数据库交互一次,但这一次却是单表查询。两种情况的性能还有待多次实战验证,这里只是暂时记录下来。

    3.IN查询和循环查询 

    1.A表查询获得list,通过stream流获取list中的外键fk_b_id集合(B表主键),然后B表查询id在fk_b_id集合中的数据,使用mybatis标签foreach遍历fk_b_id集合,也就是IN查询,只执行一条SQL语句。(实战50万条数据无索引情况下大概耗时300ms左右)

    2.A表查询获得list,通过list.foreach遍历,遍历过程中获取fk_b_id,然后通过fk_b_id查询B表中的相关数据,需要执行n条SQL语句(n为list长度),耗时大概300*n毫秒

    总结:建议通过ID集合在mybatis中使用foreach标签一次性查询,而不要通过单个ID进行多次查询。

    待续... 

    Processed: 0.011, SQL: 9