Mysql高效分頁

2021-07-23 03:39:28 字數 1337 閱讀 1535

通常針對mysql大資料量的查詢採取「分頁」策略,但是如果翻頁到比較靠後的位置時查詢將變得很慢,因為mysql將花費大量的時間來掃瞄需要丟棄的資料。

通常情況下,為了實現高效分頁,需要在查詢中where條件列和排序列應用組合索引。

例如,建立索引(a,b,c)使得以下查詢可以使用索引,提高查詢效率:

1、字段排序

order

by a

order

by a,b

order

by a, b, c

order

by a desc, b desc, c desc

2、篩選和排序

where a = const order by b, c

where a = const and b = const order by c

where a = const order by b, c

where a = const and b > const order by b, c

3、下面查詢是無法使用以上索引的

order

by a asc, b desc, c desc

//排序方向不一致

where g = const

order

by b, c // 欄位g不是索引一部分

where a = const

order

by c //沒有使用欄位b

where a = const

order

by a, d // 欄位d不是索引的一部分

1、將limit m,n的查詢改為limit n

產品實際使用過程中使用者很少關心搜尋結果的第1萬條資料。

3、使用延遲關聯

通過使用覆蓋索引來查詢返回需要的主鍵,再根據返回的主鍵關聯原表獲得需要的行,這樣可以減少mysql掃瞄那些需要丟棄的行數。

例項:

使用索引(***,rating)進行查詢:

mysql> select

from profiles inner join (

-> select

key cols> from profiles

-> where x.***='m' order by rating limit 100000, 10

-> ) as x using(key cols>);

高效的MySQL分頁

size large percona performance conference 2009上,來自雅虎的幾位工程師帶來了一篇 efficient pagination using mysql 的報告,有很多亮點,本文是在原文基礎上的進一步延伸。首先看一下分頁的基本原理 mysql explain ...

構建高效的MySQL分頁

mysql分頁的主要目的就是提公升效率,今天我們將簡單介紹如何構建高效mysql分頁。首先看一下分頁的基本原理 limit 10000,20的意思掃瞄滿足條件的10020行,扔掉前面的10000行,返回最後的20行,問題就在這裡,如果是limit 100000,100,需要掃瞄100100行,在乙個...

mysql 較為高效的分頁

直接上 daoimpl 開發轉讓頁面展示 查詢搜尋資料,並且分頁展示 param zrdp 搜尋條件封裝物件 return suppresswarnings unchecked public listshowallzrdpxxpageindex zrdpxx zrdp,int pageindex,s...