mysql中的limit offset,count的原理是先取出offset+count條記錄,然后拋棄前面offset條,然后讀后面的count條,主要是offset的問題。所以會導致偏移量越大,性能越差。
優化方法:
select film_id,description from sakila.film order by title limit 10000,5;
1、給出大致范圍,增加確定范圍的條件,避免offset
select film_id,description from sakila.film where film_id > 10000 order by title limit 5;
*在大表做分頁時也會這么做,不提供總頁數和跳頁功能,只有下一頁按鈕,提高分頁效率
2、表非常大時,盡量使用索引覆蓋掃描,縮小回表時的范圍,比如:
select film.film_id,film.description from sakila.film
inner join(
select film_id from sakila.film order by title limit 50,5
) as lim using(film_id);
order by 和limit混用問題
如果在order by語句中返回的結果集有很多行,那么非排序的列的返回結果是不確定的,即隨機的,所以如果配合limit的話每次返回的結果集的順序是不固定的
如果需要有序,則需要將需要排隊的字段都放到order by中進行排序