由于目前项目线上环境数据库中数据量过于庞大,再进行多表联合查询时导致整个程序特别慢,更有甚者会导致服务器down掉,从而影响从多服务。
其中一个重要的原因:在多表联查时使用mubatis plus的分页查询的时候会自动的执行sql的count(*)操作来确定total,这时候sql中如果用distinct或者group by来去重,并且数据库表中没有创建索引的话就会把表中每一个字段都进行一遍全局扫描,从而使sql语句特别慢。
比较简单的解决办法就是对所有进行join的表外键创建索引,去重是就不会去走全局扫描,大大的减短执行sql的时间,也可以通过将一个大sql拆分成多个小sql的方式来缓解sql的压力。
以及我们再进行表创建的时候一定要考虑清楚外键的使用,在使用mybatis plus框架join超过两张表的时候千万不要使用distinct或者是group by来去重。