查詢 limit優化

2021-07-01 18:58:43 字數 1341 閱讀 9427

一種情況,limit接受乙個引數,即是返回記錄的前面最大行數

另一情況,limit接受兩個引數,乙個是返回記錄行的偏移量,乙個是返回記錄行的最大數量

用法1:

limit rows

select * from user order by id limit 5;

返回記錄的前5行。

用法2:

limit offset, rows

select * from user order by id limit 5,10;

偏移量是5行,從第6行開始,返回記錄的10行,返回6 - 15行記錄。

在實際的開發應用中,分頁功能我們可以使用limit來實現資料庫的查詢,但當分頁越往後數,效能會慢慢變差,如:

limit 10000,20
使用explain分析下sql查詢:

> explain select * from user order by id asc limit 10000, 20

***************** 1. row **************

id: 1

select_type: ******

table: user

type: index

possible_keys: null

key: primary

key_len: 4

ref: null

rows: 10020

extra:

1 row in set (0.00 sec)

我們看到,只為查詢20行記錄,但卻查詢出10020行記錄,先拋掉前面的10000記錄,再取出20行記錄,這效能太差了。

limit中影響效能的是第乙個引數:偏移量,所以我們應該盡可能地使得偏移量變小。

上面的優化,我們可以這樣

select * from user where id > 10000 order by id asc limit 20;

這樣我們只是查詢出20行就可以了。

select * from user where id <= 10000 order by id desc limit 20;

limit 優化查詢

假設有如下sql語句 select from table1 limit offset,rows這是一條典型的limit語句,常見的使用場景是,某些查詢返回的內容特別多,而客戶端處理能力有限,希望每次只取一部分結果進行處理。上述sql語句的實現機制是 從 table 表中讀取offset rows行記...

MYSQL查詢優化 Limit

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

效能優化 Limit查詢的優化

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