好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 如何提高MySQL Limit查詢性能的方法詳解

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

熱門標簽:溫州瑞安400電話怎么申請 百度地圖標注后不顯示 俄國地圖標注app 電話機器人市場趨勢 電銷機器人 行業 南昌高頻外呼系統哪家公司做的好 昆明電信400電話辦理 淄博400電話申請 電銷機器人各個細節介紹

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

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

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

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

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

調用 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,結果速度非常理想,返回結果快了幾十倍。

Limit語法:

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

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

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

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

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

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

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

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

這里我具體使用數據分兩種情況進行測試。

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

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

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。可以預計offset越大,后者越優。

總結

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

您可能感興趣的文章:
  • MySQL查詢優化:LIMIT 1避免全表掃描提高查詢效率
  • 為什么MySQL分頁用limit會越來越慢
  • mysql優化之query_cache_limit參數說明
  • 詳解Mysql order by與limit混用陷阱
  • mysql分頁的limit參數簡單示例
  • MySQL limit分頁大偏移量慢的原因及優化方案
  • Mysql排序和分頁(order by&limit)及存在的坑
  • MySQL limit使用方法以及超大分頁問題解決
  • mysql踩坑之limit與sum函數混合使用問題詳解
  • MySQL Limit性能優化及分頁數據性能優化詳解
  • 淺談mysql使用limit分頁優化方案的實現
  • MySQL中limit對查詢語句性能的影響

標簽:吐魯番 海口 甘南 安徽 嘉峪關 洛陽 葫蘆島 拉薩

巨人網絡通訊聲明:本文標題《如何提高MySQL Limit查詢性能的方法詳解》,本文關鍵詞  如何,提高,MySQL,Limit,查詢,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何提高MySQL Limit查詢性能的方法詳解》相關的同類信息!
  • 本頁收集關于如何提高MySQL Limit查詢性能的方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 草青青| 中文字幕国产视频| 高义扒掉白洁的丁字裤| 91高素质城中村在线观看| 啊好爽好舒服| 使劲戳进来好爽我还要h| 国产白浆在线观看| 美女隐私无遮挡免费软件| 国产精品原创永久在线观看| 嗯不要了h| 小腹被灌满精子隆起被堵住| 公交车上荫蒂添的好舒服视频| 色戒汤唯毛都看到了图| 国产91久久最新观看地址| 深夜福利网| 国产?喷水?白浆?高潮| 掀开岳裙子从后面挺进去| 黄色小说内容| 中国小鲜肉gaytubesex| 国精产品一二三四线免费 | 全肉野战高h苞| 西西gogo顶级艺术人像摄影| 一边吻一边摸双乳视频| 久久精品国产99精品国产72| bbw巨大丰满xxxx| 台湾一级A片| 一级做a爰片毛片A片的价格| 搞黄视频免费观看| 亚洲福利| chinese农村野外video| 免费海外看剧网站的软件| 人与禽一级毛片免费看高清漫画 | 夫妻生活10天才一次正常吗| 热re91久久精品国产91热 | 农村寡妇偷人毛毛A片| 无码精品秘?人口一区二区| 看免费5xxaaa毛片30厘米| 96国产精品| 性欧美XXXXⅩOOOO3D画| 国内精品人妻无码久久久影院蜜桃| 国产精品欧美亚洲韩国日本99 |