MySQL使用limit条件时要注意offset不能太大
MySQL使用limit条件时要注意offset不能太大。 这样还可以: select * from user order by user_name limit 100, 20 这样就不好了: select * from user order by user_name limit 10000, 20 这条语句实际上是把 1-10020行都取出来,然后再丢掉前10000条记录,最后再返回剩下的20条记录。所以代价会非常高。 如果数据库是innodb且user_name上有索引的话,可以把sql改写成这样来优化一下: select * from user join (select id from user order by user_name limit 10000,20) as lim on user.id = lim.id 这里仍然会扫描1万多次,但扫描的不是data rows, 而是user_name上的index(并且是covering index) ; 扫完索引之后,再根据扫出的id把20行数据取出来。也就是说,磁盘读会小很多,速度也会快很多。