mysql limit 效能優化 有感

2021-09-24 19:57:23 字數 1029 閱讀 3413

基礎用法

limit 的用法是limit [offset], [rows],其中 offset 表示偏移值, rows 表示需要返回的資料行。

mysql 的 limit 給分頁帶來了極大的方便,但資料偏移量一大,limit 的效能就急劇下降。

以下是兩條查詢語句,都是取10條資料,但效能就相去甚遠。

select * from table_name limit 10000,10

select * from table_name limit 0,10

所以不能簡單的使用 limit 語句實現資料分頁。

為什麼 offset 偏大之後 limit 查詢會變慢?這需要了解 limit 操作是如何運作的,以下面這句查詢為例:

select * from table_name limit 10000,10
這句 sql 的執行邏輯是

1.從資料表中讀取第n條資料新增到資料集中

2.重複第一步直到 n = 10000 + 10

3.根據 offset 拋棄前面 10000 條數

4.返回剩餘的 10 條資料

解讀: 轉化成偽**

function limit(offset,rows)

foreach($res as $k => $v)

}return $res;

}

顯然,導致這句 sql 速度慢的問題出現在第二步!這前面的 10000 條資料完全對本次查詢沒有意義,但是卻佔據了絕大部分的查詢時間!如何解決?首先我們得了解為什麼資料庫為什麼會這樣查詢。

首先,資料庫的資料儲存並不是像我們想象中那樣,按表按順序儲存資料,一方面是因為計算機儲存本身就是隨機讀寫,另一方面是因為資料的操作有很大的隨機性,即使一開始資料的儲存是有序的,經過一系列的增刪查改之後也會變得凌亂不堪。所以資料庫的資料儲存是隨機的,使用 b+tree, hash 等方式組織索引。所以當你讓資料庫讀取第 10001 條資料的時候,資料庫就只能一條一條的去查去數。

關於Mysql limit 的效能優化

問題 mysql 的 limit 給分頁帶來了極大的方便,但資料偏移量一大,limit 的效能就急劇下降。以下是兩條查詢語句,都是取10條資料,但效能就相去甚遠。select from table name limit 10000,10 select from table name limit 0,...

Mysql limit 優化優化

mysql 效能到底能有多高?用了php半年多,真正如此深入的去思考這個問題還是從前天開始。有過痛苦有過絕望,到現在充滿信心!mysql 這個資料庫絕對是適合dba級的高手去玩的,一般做一點1萬篇新聞的小型系統怎麼寫都可以,用xx框架可以實現快速開發。可是資料量到了10萬,百萬至千萬,他的效能還能那...

MySQL limit 效能分析

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