分页查询的性能优化

转载:https://www.cnblogs.com/scotth/p/7995856.html

MySQL分页查询的性能优化

 MySQL limit分页查询的性能优化
 
Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了。
传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m
MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,所以n越大,偏移量越大,性能就越差。(全扫描,效率低下)
 
推荐分页查询方法:
1、尽量给出查询的大致范围
  1. SELECT c1,c2,cn... FROM table WHERE id>=20000 LIMIT 10;
2、子查询法
  1. SELECT c1,c2,cn... FROM table WHERE id>=
  2. (
  3. SELECT id FROM table LIMIT 20000,1
  4. )
  5. LIMIT 10;
3、高性能MySQL一书中提到的只读索引方法
优化前SQL:
  1. SELECT c1,c2,cn... FROM member ORDER BY last_active LIMIT 50,5
优化后SQL:
  1. SELECT c1, c2, cn .. .
  2. FROM member
  3. INNER JOIN (SELECT member_id FROM member ORDER BY last_active LIMIT 50, 5)
  4. USING (member_id)
分别在于,优化前的SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行。而优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过member_id读取需要的列。
4、第一步用用程序读取出ID,然后再用IN方法读取所需记录
程序读ID:
  1. SELECT id FROM table LIMIT 20000, 10;
  2. SELECT c1, c2, cn .. . FROM table WHERE id IN (id1, id2, idn.. .)
 
 
 
 
posted @ 2020-12-21 22:53  dos_hello_world  阅读(154)  评论(0)    收藏  举报