MySQL性能優化-分頁查詢越來越慢


通常我們的分頁分頁查詢時這樣的:

select * from table_name limit m,n;

當表的數據很大(幾百萬或更多)時,分頁查詢會隨m的值變大而時間邊長:

select * from bd_user limit 10000, 20;    #耗時0.003秒
select * from bd_user limit 100000, 20;   #耗時0.024秒
select * from bd_user limit 1000000, 20;  #耗時0.25秒
select * from bd_user limit 3000000, 20;  #耗時0.785秒

針對這種問題,我們優化思路如下:

  1. 利用索引列或主鍵索引做order by 排序
  2. 記住上次查找結果的主鍵,盡量給出查找范圍
  3. 利用覆蓋索引和主鍵索引

所以我們的SQL語句就變成了這樣:

select * from bd_user where id>=3000000 order by id limit 0, 20;                                                          #耗時0.001秒
select * from bd_user where id>=(select id from bd_user order by id limit 3000000, 1) order by id limit 0, 20;            #耗時0.413秒
select a.* from bd_user a inner join (select id from bd_user order by id limit 3000000, 20) b on a.id=b.id order by id;   #耗時0.397秒

我們發現,第一條SQL簡直要起飛,第二、三條執行效率也提升了一倍。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM