Limit分頁查詢效能優化

2021-09-26 06:33:04 字數 1064 閱讀 9815

1.語法:

*** limit [offset,] rows

一般是用於select語句中用以從結果集中拿出特定的一部分資料。

offset是偏移量,表示我們現在需要的資料是跳過多少行資料之後的,可以忽略;rows表示我們現在要拿多少行資料。

2.栗子:

①select * from mytbl limit 10000,100

上邊sql語句表示從表mytbl中拿資料,跳過10000行之後,拿100行

②select * from mytbl limit 0,100

表示從表mytbl拿資料,跳過0行之後,拿取100行

③select * from mytbl limit 100

這條sql跟②的效果是完全一樣的,表示拿前100條資料

3.用處:

我目前用到的地方是資料庫查詢分頁,比如前台要展示資料庫中資料,需要後台實現分頁,傳入資料要有「頁碼page」跟「每頁資料條數nums」。

對應sql大概是這樣子:select * from mytbl order by id limit (page-1)*nums,nums

4.問題發現:

在資料量不大或者是大資料量的前幾頁的時候,效能還算不壞,但是大資料量頁碼稍微大一點效能便下降比較嚴重。

5.問題分析:

原因出在limit的偏移量offset上,比如limit 100000,10雖然最後只返回10條資料,但是偏移量卻高達100000,資料庫的操作其實是拿到100010資料,然後返回最後10條。

那麼解決思路就是,我能不能跳過100000條資料然後讀取10條,而不是讀取100010條資料然後返回10條資料。

6.問題解決實現:

原sql語句如下:

select * from mytbl order by id limit 100000,10  改進後的sql語句如下:

select * from mytbl where id >= ( select id from mytbl order by id limit 100000,1 ) limit 10  注:假設id是主鍵索引,那麼裡層走的是索引,外層也是走的索引,所以效能大大提高

MySQL效能優化 利用limit分頁

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

效能優化 Limit查詢的優化

limit常用於分頁處理,時長會伴隨order by從句使用,因此大多時候回使用filesorts這樣會造成大量的io問題。例子 需求 查詢影片id和描述資訊,並根據主題進行排序,取出從序號50條開始的5條資料。select film id,description from sakila.film ...

limit分頁優化

對於有大資料量的mysql表來說,使用limit分頁存在很嚴重的效能問題。查詢從第1000000之後的30條記錄 sql 1 平均用時6.6秒 select from cdb posts order by pid limit 1000000 30 sql 2 平均用時0.6秒 select from...