亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql查詢時offset過大影響性能的原因和優(yōu)化詳解

2024-07-25 19:08:31
字體:
供稿:網(wǎng)友

前言

mysql查詢使用select命令,配合limit,offset參數(shù)可以讀取指定范圍的記錄。本文將介紹mysql查詢時,offset過大影響性能的原因及優(yōu)化方法。

準(zhǔn)備測試數(shù)據(jù)表及數(shù)據(jù)

1.創(chuàng)建表

CREATE TABLE `member` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(10) NOT NULL COMMENT '姓名', `gender` tinyint(3) unsigned NOT NULL COMMENT '性別', PRIMARY KEY (`id`), KEY `gender` (`gender`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.插入1000000條記錄

<?php$pdo = new PDO("mysql:host=localhost;dbname=user","root",'');for($i=0; $i<1000000; $i++){ $name = substr(md5(time().mt_rand(000,999)),0,10); $gender = mt_rand(1,2); $sqlstr = "insert into member(name,gender) values('".$name."','".$gender."')"; $stmt = $pdo->prepare($sqlstr); $stmt->execute();}?>mysql> select count(*) from member;+----------+| count(*) |+----------+| 1000000 |+----------+1 row in set (0.23 sec)

3.當(dāng)前數(shù)據(jù)庫版本

mysql> select version();+-----------+| version() |+-----------+| 5.6.24 |+-----------+1 row in set (0.01 sec)

分析offset過大影響性能的原因

1.offset較小的情況

mysql> select * from member where gender=1 limit 10,1;+----+------------+--------+| id | name  | gender |+----+------------+--------+| 26 | 509e279687 |  1 |+----+------------+--------+1 row in set (0.00 sec)mysql> select * from member where gender=1 limit 100,1;+-----+------------+--------+| id | name  | gender |+-----+------------+--------+| 211 | 07c4cbca3a |  1 |+-----+------------+--------+1 row in set (0.00 sec)mysql> select * from member where gender=1 limit 1000,1;+------+------------+--------+| id | name  | gender |+------+------------+--------+| 1975 | e95b8b6ca1 |  1 |+------+------------+--------+1 row in set (0.00 sec)

當(dāng)offset較小時,查詢速度很快,效率較高。 

2.offset較大的情況

mysql> select * from member where gender=1 limit 100000,1;+--------+------------+--------+| id  | name  | gender |+--------+------------+--------+| 199798 | 540db8c5bc |  1 |+--------+------------+--------+1 row in set (0.12 sec)mysql> select * from member where gender=1 limit 200000,1;+--------+------------+--------+| id  | name  | gender |+--------+------------+--------+| 399649 | 0b21fec4c6 |  1 |+--------+------------+--------+1 row in set (0.23 sec)mysql> select * from member where gender=1 limit 300000,1;+--------+------------+--------+| id  | name  | gender |+--------+------------+--------+| 599465 | f48375bdb8 |  1 |+--------+------------+--------+1 row in set (0.31 sec)

當(dāng)offset很大時,會出現(xiàn)效率問題,隨著offset的增大,執(zhí)行效率下降。 

分析影響性能原因

select * from member where gender=1 limit 300000,1;

因為數(shù)據(jù)表是InnoDB,根據(jù)InnoDB索引的結(jié)構(gòu),查詢過程為:

  • 通過二級索引查到主鍵值(找出所有g(shù)ender=1的id)。
  • 再根據(jù)查到的主鍵值通過主鍵索引找到相應(yīng)的數(shù)據(jù)塊(根據(jù)id找出對應(yīng)的數(shù)據(jù)塊內(nèi)容)。
  • 根據(jù)offset的值,查詢300001次主鍵索引的數(shù)據(jù),最后將之前的300000條丟棄,取出最后1條。

不過既然二級索引已經(jīng)找到主鍵值,為什么還需要先用主鍵索引找到數(shù)據(jù)塊,再根據(jù)offset的值做偏移處理呢?

如果在找到主鍵索引后,先執(zhí)行offset偏移處理,跳過300000條,再通過第300001條記錄的主鍵索引去讀取數(shù)據(jù)塊,這樣就能提高效率了。

如果我們只查詢出主鍵,看看有什么不同

mysql> select id from member where gender=1 limit 300000,1;+--------+| id  |+--------+| 599465 |+--------+1 row in set (0.09 sec)

很明顯,如果只查詢主鍵,執(zhí)行效率對比查詢?nèi)孔侄?,有很大的提升?nbsp; 

推測

只查詢主鍵的情況 

因為二級索引已經(jīng)找到主鍵值,而查詢只需要讀取主鍵,因此mysql會先執(zhí)行offset偏移操作,再根據(jù)后面的主鍵索引讀取數(shù)據(jù)塊。

需要查詢所有字段的情況 

因為二級索引只找到主鍵值,但其他字段的值需要讀取數(shù)據(jù)塊才能獲取。因此mysql會先讀出數(shù)據(jù)塊內(nèi)容,再執(zhí)行offset偏移操作,最后丟棄前面需要跳過的數(shù)據(jù),返回后面的數(shù)據(jù)。 

證實

InnoDB中有buffer pool,存放最近訪問過的數(shù)據(jù)頁,包括數(shù)據(jù)頁和索引頁。

為了測試,先把mysql重啟,重啟后查看buffer pool的內(nèi)容。

mysql> select index_name,count(*) from information_schema.INNODB_BUFFER_PAGE where INDEX_NAME in('primary','gender') and TABLE_NAME like '%member%' group by index_name;Empty set (0.04 sec)

可以看到,重啟后,沒有訪問過任何的數(shù)據(jù)頁。

查詢所有字段,再查看buffer pool的內(nèi)容

mysql> select * from member where gender=1 limit 300000,1;+--------+------------+--------+| id  | name  | gender |+--------+------------+--------+| 599465 | f48375bdb8 |  1 |+--------+------------+--------+1 row in set (0.38 sec)mysql> select index_name,count(*) from information_schema.INNODB_BUFFER_PAGE where INDEX_NAME in('primary','gender') and TABLE_NAME like '%member%' group by index_name;+------------+----------+| index_name | count(*) |+------------+----------+| gender  |  261 || PRIMARY |  1385 |+------------+----------+2 rows in set (0.06 sec)

可以看出,此時buffer pool中關(guān)于member表有1385個數(shù)據(jù)頁,261個索引頁。 

重啟mysql清空buffer pool,繼續(xù)測試只查詢主鍵

mysql> select id from member where gender=1 limit 300000,1;+--------+| id  |+--------+| 599465 |+--------+1 row in set (0.08 sec)mysql> select index_name,count(*) from information_schema.INNODB_BUFFER_PAGE where INDEX_NAME in('primary','gender') and TABLE_NAME like '%member%' group by index_name;+------------+----------+| index_name | count(*) |+------------+----------+| gender  |  263 || PRIMARY |  13 |+------------+----------+2 rows in set (0.04 sec)

可以看出,此時buffer pool中關(guān)于member表只有13個數(shù)據(jù)頁,263個索引頁。因此減少了多次通過主鍵索引訪問數(shù)據(jù)塊的I/O操作,提高執(zhí)行效率。

因此可以證實,mysql查詢時,offset過大影響性能的原因是多次通過主鍵索引訪問數(shù)據(jù)塊的I/O操作。(注意,只有InnoDB有這個問題,而MYISAM索引結(jié)構(gòu)與InnoDB不同,二級索引都是直接指向數(shù)據(jù)塊的,因此沒有此問題 )。 

InnoDB與MyISAM引擎索引結(jié)構(gòu)對比圖

這里寫圖片描述

mysql,查詢,offset,性能

優(yōu)化方法

根據(jù)上面的分析,我們知道查詢所有字段會導(dǎo)致主鍵索引多次訪問數(shù)據(jù)塊造成的I/O操作。

因此我們先查出偏移后的主鍵,再根據(jù)主鍵索引查詢數(shù)據(jù)塊的所有內(nèi)容即可優(yōu)化。

mysql> select a.* from member as a inner join (select id from member where gender=1 limit 300000,1) as b on a.id=b.id;+--------+------------+--------+| id  | name  | gender |+--------+------------+--------+| 599465 | f48375bdb8 |  1 |+--------+------------+--------+1 row in set (0.08 sec)

附:MYSQL limit,offset 區(qū)別

SELECT  keywordFROM  keyword_rankWHERE  advertiserid='59'order by  keywordLIMIT 2 OFFSET 1;

比如這個SQL ,limit后面跟的是2條數(shù)據(jù),offset后面是從第1條開始讀取

SELECT  keywordFROM  keyword_rankWHERE  advertiserid='59'ORDER BY  keywordLIMIT 2 ,1;

而這個SQL,limit后面是從第2條開始讀,讀取1條信息。

這兩個千萬別搞混哦。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
动漫一区二区三区| 东京热加勒比无码少妇| 在线观看 中文字幕| 神马久久久久久久久久| 精品国产91久久久久久老师| 中文字幕在线观看第二页| 欧美日韩一区二区三区不卡| 99国产**精品****| 国产无遮挡又黄又爽又色| av在线免费电影| 欧美一区二区在线不卡| 麻豆精品99| 日韩毛片免费观看| 国产性xxxx18免费观看视频| 欧美日韩1区2区| 亚洲综合欧美色图| 亚洲自拍偷拍一区| 日本不卡免费高清视频在线| 亚洲人成亚洲人成在线观看图片| 亚洲影院天堂中文av色| 操一操视频一区| 欧美午夜理伦三级在线观看| 日本一级特级毛片视频| 欧美风狂大伦交xxxx| 99国产精品久久久久久| 瑟瑟在线观看| 成人做爰69片免费看网站| 国产在线看片免费视频在线观看| 色视频在线观看在线播放| 欧美日韩国产一区二区三区不卡| 欧美天天影院| 国产精品久久久久天堂| 精品少妇久久久| 久久成人18免费观看| 欧美私人免费视频| 日本亚洲欧美| 一区二区三区黄色片| 亚洲成人久久电影| 日韩中文字幕综合| 亚洲精品99| 国产精品美女久久久久av爽| 999在线视频| 成年人网站免费在线观看| 99爱在线视频| 想看黄色一级片| 中文国产字幕在线观看| 亚洲欧美在线视频| 81精品国产乱码久久久久久| 亚洲国产无线乱码在线观看| 天天操狠狠操夜夜操| 99热播在线观看| 成年人午夜视频| 日本欧美三级| 久久久久久亚洲中文字幕无码| 国产一区二区三区四区| 在线一二三区| 丰满的少妇愉情hd高清果冻传媒| 精品无人乱码一区二区三区的优势| 伦理片一区二区三区| 国产在线播放91| 成人线上播放| 另类少妇人与禽zozz0性伦| 国产成人av在线播放| 欧美伊人久久久久久午夜久久久久| 黄色成人免费看| 免费观看在线综合| 99久久99久久久精品棕色圆| 99re这里只有精品视频首页| 精品综合久久久久| 97人摸人人澡人人人超一碰| 亚洲欧美日韩直播| jlzzjlzz国产精品久久| 国产精品久久久久无码av| 夜先锋资源网| 日本xxxx免费| 成人精品一区二区三区中文字幕| 欧美亚洲另类激情另类| 国产精品素人一区二区| 亚洲欧美日韩精品久久亚洲区| 嫩草影院一区二区| 自拍一级黄色片| 国内亚洲精品| 欧美一区二区在线视频观看| 国产又粗又爽又黄的视频| 黄色a级片在线观看| 青春有你2免费观看完整版在线播放高清| 91精彩视频在线观看| 男人用机机桶女人| 欧美黑人性猛交| 香蕉久久国产| 51精品国产| 久久蜜桃一区二区| 美女一区2区| 91免费视频网站| 亚洲最大成人在线观看| 国产精品电影一区二区| 中文字幕在线视频网站| 亚洲天堂av一区二区| www..69.hd| 成人www视频在线观看| 亚洲美女在线免费观看| 欧美成人一级| 日本精品久久中文字幕佐佐木| 午夜伦理精品一区| 日韩精品永久网址| 色呦呦在线资源| 精品成人乱色一区二区| 婷婷av在线| 狠狠97人人婷婷五月| 最新版天堂资源中文官网| 日韩精品欧美国产精品忘忧草| 国产一区二区三区av在线| 国产成人在线电影| 国产精品高潮呻吟久久av无限| 国产无遮挡裸体免费视频| 日本www在线观看视频| 国产 国语对白 露脸| 国产精品无码无卡无需播放器| 亚洲一二三四五六区| 精品一成人岛国片在线观看| 亚洲欧美日本一区二区| 一个人看的免费网站www视频| 丝袜一区二区三区| 日韩影视在线| 亚洲另类色综合网站| 久久精品国产露脸对白| 午夜精品在线视频一区| 独立日3在线观看完整版| 黄色一级大片在线免费看国产| 久久久久久国产| 国产精品久久久久久av公交车| 黄网站网址视频| 日本三级黄色网址| 成人精品三级| av麻豆国产| 国产精品1luya在线播放| av7777777| 亚洲精品无播放器在线播放| 3d动漫精品啪啪1区2区免费| 精品丰满少妇一区二区三区| caoporn国产精品免费公开| 久草在线青青草| 亚洲最大成人综合网| 一本色道久久综合亚洲精品按摩| 日本一区二区黄色| 中字幕一区二区三区乱码| 国产美女精品一区二区三区| 精品一区二区三区四| 石原莉奈一区二区三区高清在线| 九色蝌蚪在线观看| 亚洲国产精品嫩草影院久久av| 国产精品欧美久久久久一区二区| 国产xxx精品视频大全| 国产xxxxxx久色视频在| 色图在线观看| 国产成人鲁色资源国产91色综| 熟妇高潮一区二区高潮| 欧美日韩精品免费| 蜜桃av麻豆av天美av免费| 国产情人综合久久777777| 久久精品国产一区二区电影| 日韩欧美一区二区三区四区| 97久久夜色精品国产九色| 欧美丝袜美女中出在线| 久久久精品美女| 日韩av一区二| 亚洲在线视频免费观看| 99理论电影网| 色先锋资源在线播放av| 奇米亚洲欧美| 一区二区三区在线免费观看视频| 少妇bbw搡bbbb搡bbbb| 黄色国产网站在线播放| 老熟妇高潮一区二区三区| 日韩大片欧美大片| 亚洲欧洲二区| 免费不卡在线观看av| 欧美大尺度在线观看| 99久久综合99久久综合网站| 高清欧美性猛交xxxx黑人猛交| 日韩精品久久久免费观看| 日韩欧美一区二区三区四区| 日韩女优电影在线观看| 日韩免费不卡视频| 好看的视频你懂的| 91精品久久久久久久久久久| 日日摸天天爽天天爽视频| 少妇久久久久久| 欧美蜜桃一区二区三区| 成人午夜在线视频一区| 中文字幕影音先锋| 91国产高清在线| 亚洲高清二区| 亚洲精品视频一区二区三区| www.日本在线播放| 福利一区福利二区| 四虎.com| 欧美肉大捧一进一出免费视频| 日韩亚洲在线视频| 一级少妇精品久久久久久久| av电影在线免费| 欧美成人精品激情在线视频| 五月婷婷激情综合| 国产精品香蕉国产| 夜先锋资源站| 亚洲第一精品夜夜躁人人躁| 黑人巨大精品欧美一区免费视频| 国产主播一区二区| 亚洲精品影视在线观看| 亚洲国产精品无码av| 欧美色图亚洲天堂| 欧美1区免费| 奇米影视首页 狠狠色丁香婷婷久久综合| 欧美肥婆姓交大片| 日本在线高清视频一区| 一本久道久久综合无码中文| 欧美成人官网二区| 午夜网站在线观看| 国产又色又爽又黄又免费| 欧美暴力调教| av男人天堂网| 91传媒理伦片在线观看| 粉嫩嫩av羞羞动漫久久久| 日韩精品极品视频在线观看免费| 一本色道久久88综合日韩精品| 国产美女在线看| 国产一区二区三区在线播放免费观看| 免费黄网站在线观看| 欧洲亚洲妇女av| 18视频免费网址在线观看| 欧美色精品天天在线观看视频| 国产成人精品一区二区在线小狼| 中文字幕制服丝袜在线| 国产在线激情| igao视频网在线视频| 欧美黄网站色视频| 激情综合网五月婷婷| 曰韩少妇与小伙激情| 97caocao| 欧美丰满熟妇xxxxx| 欧美成人免费播放| 成人午夜sm精品久久久久久久| 亚洲色图综合久久| 91超碰中文字幕久久精品| 国产一区二区三区影视| 午夜福利理论片在线观看| 任你操精品视频| 色吊一区二区三区| 欧美一级在线看| 久久亚洲天堂网| 久久全国免费视频| 日韩欧美在线123| 亚洲激情综合网| 国产精品一区二区三区视频网站| 亚洲国产精品女人| 91精品视频在线播放| 久久香蕉国产线看观看av| 澳门精品久久国产| 久久精品日产第一区二区三区乱码| 再深点灬舒服灬太大了添少妇视频| 国产乱妇乱子在线播视频播放网站| 欧美伊人久久久久久午夜久久久久| 阿v天堂2017| 在线免费一区三区| 另类中文字幕网| 密臀av在线| 亚洲字幕久久| 成人羞羞网站入口免费| 国产一区二区三区在线观看精品| 日韩专区视频网站| 欧美一级高潮片| 欧美hentaied在线观看| 久久久久久久久久久久久久久久久久久| 在线观看av资源网| 欧美电影《睫毛膏》| 亚洲人在线观看视频| 久久天天躁狠狠躁夜夜躁2014| 川上优av中文字幕一区二区| 男人av在线| 日本成人在线不卡| 欧美日韩人妻精品一区在线| 老司机精品在线| 欧亚洲嫩模精品一区三区| 亚洲茄子视频| 岛国成人毛片| 国产成人精品免费看视频| 可以直接看的av网址站| 9l视频自拍蝌蚪9l视频| 国产极品jizzhd欧美| 99热超碰在线| 国产精品一区二区三区av麻| 色网在线免费观看| 国产精品一二三区在线观看| 无夜福利视频观看| av伦理在线| 精品黑人一区二区三区观看时间| 经典三级一区二区三区视频| 巨大荫蒂视频欧美大片| 男女性激情视频在线观看| youjizz在线视频| 337p粉嫩大胆噜噜噜噜噜91av| 日韩美女激情视频| 欧美激情第8页| 色七七影院综合| 国色天香久久精品国产一区| 8x海外华人永久免费日韩内陆视频| 久久精品国产免费| 久久综合中文| 五月天欧美精品| 色狠狠久久av五月综合|| 91九色露脸| 欧美日韩国产影片| 欧美日韩黄网站| 亚洲精品一二三| 国产精品99无码一区二区| 国产一级精品毛片| 成年人视频免费在线观看| 久久成人精品| 国产老头和老头xxxx×| 久久这里只有精品首页| 日韩一区二区三区在线看| 成人欧美精品一区二区| 国产日韩一区二区| 国产尤物视频在线| 色综合一区二区| 特级毛片在线免费观看| 日韩精品亚洲aⅴ在线影院| 92精品国产成人观看免费|