MySQL limit用法及效能分析

2021-10-03 06:39:42 字數 1938 閱讀 3212

在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料(分頁),這個時候怎麼辦呢?不用擔心,mysql已經為我們提供了這樣乙個功能。

具體語法

select * from table limit [offset,] rows | rows offset offset
limit 子句可以被用於強制 select 語句返回指定的記錄數。limit 接受乙個或兩個數字引數。引數必須是乙個整數常量。如果給定兩個引數,第乙個引數指定第乙個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1): 為了與 postgresql 相容,mysql 也支援句法: limit # offset #。

樣例如下:

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分頁sql語句,如果和mssql的top語法相比,那麼mysql的limit語法要顯得優雅了許多。使用它來分頁是再自然不過的事情了。

基本格式如下:

select ... from ... where ... order by ... limit ...
在中小資料量的情況下,這樣的sql足夠用了,唯一需要注意的問題就是確保使用了索引

舉例來說,如果實際sql類似下面語句,那麼在category_id, id兩列上建立復合索引比較好:

select * from articles where category_id = 123 order by id limit 50, 10
隨著資料量的增加,頁數會越來越多,就是越往後分頁,limit語句的偏移量就會越大,速度也會明顯變慢。

select id from sbtest.sbtest1 where id>="200000" order by id limit 100000,10;

select id from sbtest.sbtest1 where id>="200000" order by id limit 700000,10;

兩條語句的執行計畫是一樣的,都是使用主鍵索引,但執行時間越差了0.76秒,但是通過innodb_buffer_page檢視,索引使用的頁情況,主鍵載入了6000多頁,也就是說,offset越大,索引掃瞄頁越多,所以導致變慢。

我們可以通過子查詢的方式來提高分頁效率:

select * from articles where  id >=

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

join分頁方式

select * from `content` as t1 

join (select id from `content` order by id desc limit ".($page-1)*$pagesize.", 1) as t2

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

策略:

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

mysql LIMIT 子句用法及原理

使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,已 經為我們提供了這樣乙個功能。limit 子句可以被用於強制 select 語句返回指定的記錄數。limit 接受乙個或兩個數字引數。引數必須是乙個整數常量。如果給定兩個引數,第乙個引數指定第乙個返回記錄行的偏移量...

MySQL limit 效能分析

limit用法 mysql的分頁查詢語句的效能分析 對於有大資料量的mysql表來說,使用limit分頁存在很嚴重的效能問題。有彩蛋哦 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,mysql已經為我們提供了這樣乙個功能。select from table...

mysql limit效能問題

我們通常使用limit進行分頁查詢 select from table name where val 4 order by id limit 100,10 當偏移量很大時,會遇到效能問題 select from table name where val 4 order by id limit 100...