MySQL分頁語法

2021-09-26 04:38:53 字數 1891 閱讀 6280

mysql分頁語法

一、limit語法

limit 子句可以被用於強制 select 語句返回指定的記錄數。limit 接受乙個或兩個數字引數。引數必須是乙個整數常量。如果給定兩個引數,第乙個引數指定第乙個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。

初始記錄行的偏移量是 0(而不是 1);

mysql> select * from table limit 5,10; // 檢索記錄行 6-15

為了檢索從某乙個偏移量到記錄集的結束所有的記錄行,可以指定第二個引數為 -1:

mysql> select * from table limit 95,-1; // 檢索記錄行 96-last.

如果只給定乙個引數,它表示返回最大的記錄行數目:

mysql> select * from table limit 5; //檢索前 5 個記錄行

換句話說,limit n 等價於 limit 0,n。

二、mysql的分頁查詢語句的效能分析最基本的分頁方式:

select … from … where … order by … limit …

在中小資料量的情況下,這樣的sql足夠用了,唯一需要注意的問題就是確保使用了索引:舉例來說,如果實際sql類似下面語句,那麼在category_id, id兩列上建立復合索引比較好:

**如下:

select * from articles where category_id = 123 order by id limit 50, 10

子查詢的分頁方式:

隨著資料量的增加,頁數會越來越多,檢視後幾頁的sql就可能類似:

**如下:

select * from articles where category_id = 123 order by id limit 10000, 10

一言以蔽之,就是越往後分頁,limit語句的偏移量就會越大,速度也會明顯變慢。

此時,我們可以通過子查詢的方式來提高分頁效率,大致如下:

select * from articles where id >=

(select id from articles where category_id = 123 order by id limit 10000, 1) limit 10

join分頁方式

select * fromcontentas t1

join (select id fromcontentorder by id desc limit 「.(pag

e−1)

∗page-1)*

page−1

)∗pagesize.」, 1) as t2

where t1.id

<= t2.id order by t1.id desc limit $pagesize;

經過我的測試,join分頁和子查詢分頁的效率基本在乙個等級上,消耗的時間也基本一致。 explain sql語句:

id select_type table type possible_keys key key_len ref rows extra

primary system null null null null 1

primary t1 range primary primary 4 null 6264 using where

derived content index null primary 4 null 27085 using index

那就直接用子查詢語句!

為什麼會這樣呢?因為子查詢是在索引上完成的,而普通的查詢時在資料檔案上完成的,通常來說,索引檔案要比資料檔案小得多,所以操作起來也會更有效率。

實際可以利用類似策略模式的方式去處理分頁,比如:判斷如果是一百頁以內,就使用最基本的分頁方式,大於一百頁,則使用子查詢的分頁方式。

分頁查詢語法

分頁查詢的簡單實現.分頁查詢無非有兩種實現方式 1 將資料庫中全部資料讀取出來,在分段獲取 2 直接讀取需要顯示的資料條數 使用第一種方法需要專門的快取伺服器,第二種方法適用在流量小的情況下使用,這裡簡單的使用第二種實現方法。下面是使用的流程 1 獲取總記錄數 2 前端計算分頁 3 傳遞頁面,對應查...

mysql分頁概念 MySQL 分頁

分頁的基本原理 mysql explain select from message order by id desc limit 10000,20 1.row id 1 select type table message type index possible keys null key prima...

oracle分頁基本語法

分頁 mysql limit oracle rownum偽列 偽列 在表結構中不存在的列 rowid偽列 用於唯一標識一行記錄 rownum偽列 行號 select from emp 看不到行號 select rownum from emp 報錯 select e.rownum from emp e...