优化LIMIT分页
在分页偏移量很大的时候,如LIMIT 10000,20这样的查询,MySQL需要查询10020条记录然后只返回最后20条,前面10000条记录都被抛弃,这样代价非常高。
优化的最简单的办法就是尽可能地使用索引覆盖扫描,而不是查询所有的列。然后根据需要做一次关联操作再返回所需的列,对于偏移量很大的时候,这样做的效率回提升很大,如下:
SELECT file_id, description FROM film ORDER BY title LIMIT 50, 5;
修改为:
SELECT film.film_id, film.description FROM film
INNER JOIN (SELECT film_id FROM film ORDER BY title LIMIT 50, 5) AS lim USING(film_id);
INNER JOIN (SELECT film_id FROM film ORDER BY title LIMIT 50, 5) AS lim USING(film_id);
这里“延迟关联”将大大提升查询效率,它让MySQL扫描尽可能少的页面,获取需要访问的记录后在根据关联列回原表查询需要的所有列。