MySQL分頁效能優化

2021-07-14 02:10:08 字數 1100 閱讀 1252

在對大表進行分頁時,如果在服務端實現分頁,大多數情況採用sql的limit語法來實現。但是當頁數越來越大時,效能很可能成為問題,尤其是需要查詢表的所有字段。

1. 索引與非索引字段

在查詢的結果集中,如果只包含索引字段,效能相比於包含非索引字段,差別很大。下面是乙個簡單的例子,在大約50w行的表上操作:

只查詢索引id欄位

select id from test.bas_table

limit 400000,1000;

-- 0.094 second

查詢所有字段
select * from test.bas_table

limit 400000,1000;

-- 0.547 second

可以看到大概是6倍的效能差異,如果錶行數更大,欄位更多,這種差異會更加懸殊。

因此在優化時的原則之一就是盡可能只查詢索引字段

2. 分頁優化的2種方式

根據上面的原則,我們盡量避免在全表掃瞄的時候查詢非索引字段,下面是2種優化方式,核心都是採用id過濾。

1) id比較分頁

先查詢出當前頁的最小id,然後根據id比較查詢。

select

*from

bas_table a

where

id >= (select

idfrom

test.bas_table

limit 400000 , 1)

limit 1000;

-- 0.078 second

2) 過濾id後join

先查詢出當前頁的所有id,然後關聯主表操作。

select

*from

bas_table a

inner

join

(select

idfrom

test.bas_table

limit 400000 , 1000) b on a.id = b.id;

-- 0.094

可以看到,效能上得到比較大的提公升。

(完)

mysql 分頁效能優化

最簡單的分頁方法是這樣的 select from exarticletemp order by createdate desc limit 10000,10 該表中存在5w左右資料 執行時間平均在10s左右,因此該種方式在資料量大的情況下查詢效率極低。優化方式有以下幾種 1.此種方式平均在7 8s之...

MySQL分頁效能優化指南

一道面試的問題,當mysql表中有資料量很大的時候如何做分頁。當時只知道在資料量很大的時候可以分表,但不知道不分表時可以怎麼做。唉,誰讓 商就那麼幾條資料,乙個簡單的limit,offset就完全hold住了 捂臉 很多應用往往只展示最新或最熱門的幾條記錄,但為了舊記錄仍然可訪問,所以就需要個分頁的...

MySQL效能優化 利用limit分頁

部落格已轉至 url mysql 資料庫的limit支援如下形式的選擇 limit n,m 表示從第n條記錄開始選擇m條記錄。而大多數開發人員喜歡使用這類語句來解決web中經典的分頁問題。對於小規模的資料,這並不會有太大的問題。對於論壇這類可能具有非常大規模資料的應用來說,limit n,m 的效率...