首頁(yè)常見問題正文

怎樣對(duì)MySQL的limit分頁(yè)查詢進(jìn)行優(yōu)化?

更新時(shí)間:2023-05-08 來(lái)源:黑馬程序員 瀏覽量:

在數(shù)據(jù)量比較大時(shí),如果進(jìn)行l(wèi)imit分頁(yè)查詢,在查詢時(shí),越往后,分頁(yè)查詢效率越低。執(zhí)行l(wèi)imit分頁(yè)查詢耗時(shí)對(duì)比如下:
1683530047535_101.png

因?yàn)?,?dāng)在進(jìn)行分頁(yè)查詢時(shí),如果執(zhí)行l(wèi)imit 9000000,10,此時(shí)需要MySQL排序前9000010記錄,僅僅返回9000000 - 9000010的記錄,其他記錄丟棄,查詢排序的代價(jià)非常大 。

優(yōu)化思路:一般分頁(yè)查詢時(shí),通過(guò)創(chuàng)建覆蓋索引能夠比較好地提高性能,可以通過(guò)覆蓋索引加子查詢形式進(jìn)行優(yōu)化

select*
from tb_sku t.
   (select id from tb_sku order by id limit 9000000,10) a
where thg = a.id;

先分頁(yè)查詢數(shù)據(jù)的同字段,確定了id之后,再用子查詢來(lái)過(guò)濾,只查詢這個(gè)試列表中的數(shù)據(jù),因?yàn)椴樵僫d的時(shí)候,走的覆蓋索引,所以效率可以提升很多。


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!