用法
SELECT * FROM table_name LIMIT [offset ,] rows
- offset 为可选,表示偏移量(从第几条开始返回数据)。
- rows 表示返回数据的条数。
案列
优化前:
SELECT * FROM table_name LIMIT 10000000, 10
原理:mysql会先查询出10000010(一千万零一十)条数据,然后丢弃前10000000(一千万)条数据,返回最后10(十)条数据,所以偏移量越大,性能就越差。
方法一、
使用主键索引进行关联查询
SELECT
t2.*
FROM
table_name t2
INNER JOIN (SELECT id FROM table_name LIMIT 10000000,10) t1 ON t1.id = t2.id ;
方法二、
每次记录当前页的最后一条id,作为下一页的查询条件
SELECT t.* FROM table_name t WHERE t.id >= last_id LIMIT 10 ;
业务优化
一、正常情况下没有人会翻到几千页,我们可以通过限制可以翻页的数量解决这个问题,如:百度、谷歌。
二、手机端可以使用下拉方式进行滚动翻页,每次记录当前页的最后一条id,作为下一页的查询条件。ES可以使用scroll API
网友评论