MySQL的limit工作原理就是先读取n条记录,然后抛弃前n条,读m条想要的,所以n越大,性能会越差。
一般的分页做法,测试耗时 10.961s
-
SELECT *5000000,10
优化后,测试耗时 1.943s
-
SELECT *(SELECT fid FROM t_history_data LIMIT 5000000,10)(fid)
优化前的SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行。而优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过member_id读取需要的列