Mysql中limit的用法

2021-09-27 02:48:40 字數 1361 閱讀 7203

limit語法支援兩個引數,offsetlimit,前者表示偏移量,後者表示取前limit條資料.

例如:

## 返回符合條件的前10條語句 

select * from user limit 10

## 返回符合條件的第11-20條資料

select * from user limit 10,20

從上面也可以看出來,limit n等價於limit 0,n

實際使用中我們會發現,在分頁的後面一些頁,載入會變慢,也就是說:

select * from user limit 1000000,10語句執行較慢.那麼我們首先來測試一下.

首先是在offset較小的情況下拿100條資料.(資料總量為200左右).然後逐漸增大offset.

select * from user limit 0,100 ---------耗時0.03s

select * from user limit 10000,100 ---------耗時0.05s

select * from user limit 100000,100 ---------耗時0.13s

select * from user limit 500000,100 ---------耗時0.23s

select * from user limit 1000000,100 ---------耗時0.50s

select * from user limit 1800000,100 ---------耗時0.98s

可以看到隨著offset的增大,效能越來越差.

這是為什麼呢?因為limit 10000,10的語法實際上是mysql查詢到前10010條資料,之後丟棄前面的10000行,這個步驟其實是浪費掉的.

用id優化

先找到上次分頁的最大id,然後利用id上的索引來查詢,類似於select * from user where id>1000000 limit 100.

這樣的效率非常快,因為主鍵上是有索引的,但是這樣有個缺點,就是id必須是連續的,並且查詢不能有where語句,因為where語句會造成過濾資料.

用覆蓋索引優化

mysql的查詢完全命中索引的時候,稱為覆蓋索引,是非常快的,因為查詢只需要在索引上進行查詢,之後可以直接返回,而不用再回資料表拿資料.因此我們可以先查出索引的id,然後根據id拿資料.

select * from (select id from job limit 1000000,100) a left join job b on a.id = b.id;
耗時0.2秒.

mysql 中limit的用法

select from table limit offset,rows rows offset offset 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,mysql已經為我們提供了上面這樣乙個功能。limit 子句可以被用於強制 select 語句返回指...

mysql中的limit用法

在實際專案開發中,查詢的時候需要返回前幾條資料或者中間幾行的資料,mysql提供了limit來解決這一問題,實際專案 一般用來分頁。1 select from table limit 5,10 檢索資料庫記錄行 6 152 select from table limit 5 檢索資料庫前5條資料記錄...

Mysql中limit的用法

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