首页 > 开发 > MySQL > 正文

MySQL分页性能问题,Limit 性能问题求解决!

2017-09-08 09:11:06  来源:网友分享

众所周知,Mysql分页就要用到Limit进行分页,数据量/分页数小的时候Limit性能是可想而知的。如:

SELECT pid,author,hash,dateline FROM posts WHERE pid='123456' ORDER BY pid ASC LIMIT 100,100;

上述SQL语句性能没有任何问题。

但是,如果当offset便宜了过大的情况就会出现性能瓶颈。如:

SELECT pid,author,hash,dateline FROM posts WHERE pid='123456' ORDER BY pid ASC LIMIT 159000,100;

若要解决Limit offset过大的时候,可以采用子查询的方法进行分页。如:

SELECT pid,author,hash,dateline FROM posts ORDER BY pid ASC LIMIT 159000,100;

等价于:

SELECT pid,author,hash,dateline FROM posts WHERE pid>=(SELECT pid FROM posts LIMIT 159000,1)ORDER BY pid ASC LIMIT 100;

此时的性能是纯粹LIMIT 159000,100 的几倍至高。

但是问题又来了,子查询又必须是数据连续,所以无法加入WHERE查询条件,如:

SELECT tid,pid,author,hash,dateline FROM posts WHERE tid=10 AND pid>=(SELECT pid FROM posts LIMIT 159000,1)ORDER BY pid ASC LIMIT 100;

此时的结果并非我想要的结果。

所以求高性能解决LIMIT分页的方法。在线等。

============================PS: pid 为主键

解决方案

这篇PDF可以解决你的问题

Efficient Pagination Using MySQL