Mybatis分页插件Pagehelper自定义count优化查询效率

PageHelper是mybatis 提供的分页插件。

1.问题

PageHelper默认情况下会自动生成COUNT语句,但某些情况下,如使用了group by语句会导致语句存在嵌套情况(select count(0) from (你的查询语句))影响效率。

sql

   select
         c.id as cid,
         c.name as cname,
         s.id as sid,
         s.name as sname
         from t_class c left join  t_student s on c.id =s.cid
         group  by c.id

默认count语句

SELECT count(0) FROM (SELECT c.id AS cid, c.name AS cname, s.id AS sid, s.name AS sname FROM t_class c LEFT JOIN t_student s ON c.id = s.cid GROUP BY c.id) table_count

2.解决办法

自定义count语句,在同mapper文件,创建命名规则为(方法名+COUNT)

    

执行的count为

SELECT count(DISTINCT c.id) FROM t_class c LEFT JOIN t_student s ON c.id = s.cid

总结

通过优化查询总数的方法来优化查询效率,如果效率还是太慢只能选择其他方法,缓存、不查总数用固定总数或者虚假总数、或者不要总数利用自增字段来做分页(where id > xxx order by id limit 10)等等。

你可能感兴趣的:(mybatis,mybatis,mysql,java)