欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何提高MySQL Limit查詢性能的方法詳解

 更新時間:2019年03月20日 14:40:48   作者:CODETC  
今天小編就為大家分享一篇關(guān)于如何提高MySQL Limit查詢性能的方法詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

在MySQL數(shù)據(jù)庫操作中,我們在做一些查詢的時候總希望能避免數(shù)據(jù)庫引擎做全表掃描,因為全表掃描時間長,而且其中大部分掃描對客戶端而言是沒有意義的。其實我們可以使用Limit關(guān)鍵字來避免全表掃描的情況,從而提高效率。

有個幾千萬條記錄的表 on MySQL 5.0.x,現(xiàn)在要讀出其中幾十萬萬條左右的記錄。常用方法,依次循環(huán):

select * from mytable where index_col = xxx limit offset, limit;

經(jīng)驗:如果沒有blob/text字段,單行記錄比較小,可以把 limit 設(shè)大點,會加快速度。

問題:頭幾萬條讀取很快,但是速度呈線性下降,同時 mysql server cpu 99% ,速度不可接受。

調(diào)用 explain select * from mytable where index_col = xxx limit offset, limit; 顯示 type = ALL

在 MySQL optimization 的文檔寫到"All"的解釋

A full table scan is done for each combination of rows from the previous tables. This is normally not good if the table is the first table not marked const, and usually very bad in all other cases. Normally, you can avoid ALL by adding indexes that allow row retrieval from the table based on constant values or column values from earlier tables.

看樣子對于 all, mysql 就使用比較笨的方法,那就改用 range 方式? 因為 id 是遞增的,也很好修改 sql 。

select * from mytable where id > offset and id < offset + limit and index_col = xxx 

explain 顯示 type = range,結(jié)果速度非常理想,返回結(jié)果快了幾十倍。

Limit語法:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

LIMIT子句可以被用于強制 SELECT 語句返回指定的記錄數(shù)。LIMIT接受一個或兩個數(shù)字參數(shù)。參數(shù)必須是一個整數(shù)常量。

如果給定兩個參數(shù),第一個參數(shù)指定第一個返回記錄行的偏移量,第二個參數(shù)指定返回記錄行的最大數(shù)目。初始記錄行的偏移量是 0(而不是 1)。

為了與 PostgreSQL 兼容,MySQL 也支持句法:LIMIT # OFFSET #。

mysql> SELECT * FROM table LIMIT 5,10; //檢索記錄行6-15
//為了檢索從某一個偏移量到記錄集的結(jié)束所有的記錄行,可以指定第二個參數(shù)為-1
mysql> SELECT * FROM table LIMIT 95,-1; //檢索記錄行96-last
//如果只給定一個參數(shù),它表示返回最大的記錄行數(shù)目,換句話說,LIMIT n 等價于 LIMIT 0,n
mysql> SELECT * FROM table LIMIT 5; //檢索前5個記錄行

MySQL的limit給分頁帶來了極大的方便,但數(shù)據(jù)量一大的時候,limit的性能就急劇下降。同樣是取10條數(shù)據(jù),下面兩句就不是一個數(shù)量級別的。

select * from table limit 10000,10
select * from table limit 0,10

文中不是直接使用limit,而是首先獲取到offset的id然后直接使用limit size來獲取數(shù)據(jù)。根據(jù)他的數(shù)據(jù),明顯要好于直接使用limit。

這里我具體使用數(shù)據(jù)分兩種情況進行測試。

1、offset比較小的時候:

select * from table limit 10,10 
//多次運行,時間保持在0.0004-0.0005之間
Select * From table Where vid >=(Select vid From table Order By vid limit 10,1) limit 10 
//多次運行,時間保持在0.0005-0.0006之間,主要是0.0006

結(jié)論:偏移offset較小的時候,直接使用limit較優(yōu)。這個顯然是子查詢的原因。

2、offset大的時候:

select * from table limit 10000,10 
//多次運行,時間保持在0.0187左右
Select * From table Where vid >=(Select vid From table Order By vid limit 10000,1) limit 10
//多次運行,時間保持在0.0061左右,只有前者的1/3??梢灶A計offset越大,后者越優(yōu)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • mysql查詢慢的原因和解決方案

    mysql查詢慢的原因和解決方案

    最近發(fā)現(xiàn)公司網(wǎng)站后臺查詢的時候比較慢,可能因為大量的like查詢導致,這里為大家分享一下方法,需要的朋友可以參考下
    2019-09-09
  • 更改MySQL數(shù)據(jù)庫的編碼為utf8mb4問題

    更改MySQL數(shù)據(jù)庫的編碼為utf8mb4問題

    這篇文章主要介紹了更改MySQL數(shù)據(jù)庫的編碼為utf8mb4問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • mysql 8.0.12 安裝使用教程

    mysql 8.0.12 安裝使用教程

    這篇文章主要為大家詳細介紹了mysql 8.0.12 安裝使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)

    mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)

    MySQL 中的 FIND_IN_SET 函數(shù)用于在逗號分隔的字符串列表中查找指定字符串的位置,本文就來介紹一下mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)
    2024-08-08
  • 詳細分析mysql MDL元數(shù)據(jù)鎖

    詳細分析mysql MDL元數(shù)據(jù)鎖

    這篇文章主要介紹了mysql MDL元數(shù)據(jù)鎖的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • mysql常用日期時間/數(shù)值函數(shù)詳解(必看)

    mysql常用日期時間/數(shù)值函數(shù)詳解(必看)

    下面小編就為大家?guī)硪黄猰ysql常用日期時間/數(shù)值函數(shù)詳解(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • MySql學習心得之存儲過程

    MySql學習心得之存儲過程

    之前總是在MSSQL上寫存儲過程,沒有在MYSQL上寫過,也基本沒有用過,今天需要用到MYSQL,研究了下,把項目的需要的存儲過程寫了一部分,寫一下工作總結(jié)。這里沒有給出數(shù)據(jù)庫結(jié)構(gòu),不討論SQL語句的細節(jié),主要探討存儲過程語法,適合有基礎(chǔ)的人。
    2014-06-06
  • 簡述MySQL 正則表達式

    簡述MySQL 正則表達式

    大家都知道MySQL可以通過 LIKE ...% 來進行模糊匹配,MySQL 同樣也支持其他正則表達式的匹配, MySQL中使用 REGEXP 操作符來進行正則表達式匹配。對mysql正則表達式知識感興趣的朋友一起看看吧
    2016-11-11
  • 有關(guān)mysql優(yōu)化的一些東東整理

    有關(guān)mysql優(yōu)化的一些東東整理

    有關(guān)mysql優(yōu)化的一些東東,自己整理的,網(wǎng)上搜集的,供朋友們學習參考吧
    2013-02-02
  • mysql性能優(yōu)化工具--tuner-primer使用介紹

    mysql性能優(yōu)化工具--tuner-primer使用介紹

    這篇文章主要介紹了mysql性能優(yōu)化工具--tuner-primer的使用方法與返回數(shù)據(jù)分析,需要的朋友可以參考下
    2016-05-05

最新評論