打卡(2020-05-02)
MySQL如何優化分頁查詢
一般分頁查詢是創建覆蓋索引能夠比較好的提升性能。
- 第一種優化思路
在索引上完成分頁操作,最後根據主鍵關聯回原表查詢所需要的其他列內容
// 未優化之前的sql,這個相當於是全表掃描
select film_id,description from film order by title limit 50,5;
// 優化之後的sql,這個就是使用主鍵索引了
select a.film_id,a.description from film a inner join (select film_id from film order by title limit 50,5) b on a.film_id = b.film_id;
// 通過主鍵關聯查詢可以使用expain查看優化結果type已經不是使用all而是eq_ref/index
總結:這種方式就是讓MySQL掃描儘可能少的頁面
來提高分頁的效率!
- 第二種優化思路
就是將limit查詢換成某一個位置查詢
// 優化前的sql
select * from payment order by rental_id desc limit 410,10;
// 優化後的sql
// 說明:這種優化方式就是增加一個參數 last_page_record,用來記錄上一次最後一行的rental_id
select * from payment where rental_id>15640 order by rental_id desc limit 10;
總結:這樣把limit m,n轉換成limit n的查詢,只適合排序字段不會出現重複值得特定環境
,這樣的操作可以減少翻頁的壓力,如果排序出現大量的重複值,使用這個優化方式,那麼會出現分頁結果錯亂,而不適合使用第二種的優化思路!