MySQL 解决分页效率问题

2016-09-14 15:42:45   数据库

  mysql  

效率低sql

  1. select name from user where sex='女' order by last_login_time limit 10000000,10

上面的sql语句,不管这么建立索引,效率都会很低,会花费大量的时间去扫描需要废弃的数据

解决办法

使用延迟关联,通过使用覆盖所有查询返回需要的主键。再给根据这些表的主键关联原来的表获取需要的行,这样可以减少MySQL扫描那些需要丢弃的行数。下列的实例就是高效的使用(sex,last_login_time)索引进行排序和分页

改写后的sql

  1. select 字段列...... from table inner join (
  2. select 主键 from table
  3. where x.sex='女' order by last_login_time limit 1000000,10
  4. ) as x using(主键);