日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试

發(fā)布時(shí)間:2025/3/15 数据库 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

百度了一遍下來(lái)都在說(shuō)myisam引擎的查詢性能比innodb好,但是沒(méi)有看到拿數(shù)據(jù)出來(lái)說(shuō)話的,今天得空就做了下測(cè)試。

知識(shí)回顧

摘抄自:https://blog.csdn.net/STFPHP/article/details/52827845?utm_source=blogkpcl13

MyISAM索引的實(shí)現(xiàn)

MyISAM索引文件和數(shù)據(jù)文件是分離的,索引文件僅保存記錄所在頁(yè)的指針(物理位置),通過(guò)這些地址來(lái)讀取頁(yè),進(jìn)而讀取被索引的行。下圖是MyISAM的索引原理圖:(為了簡(jiǎn)化,一個(gè)頁(yè)內(nèi)只存放了兩條記錄。)

上圖所提供的示例表字段有Col1(ID)、Col2(age)、Col3(name)三個(gè),其中Col1為Primary Key(主鍵),上圖很好地說(shuō)明了樹中葉子保存的是對(duì)應(yīng)行的物理位置。通過(guò)該值,存儲(chǔ)引擎能順利地進(jìn)行回表查詢,得到一行完整記錄。同時(shí),每個(gè)葉子頁(yè)也保存了指向下一個(gè)葉子頁(yè)的指針。從而方便葉子節(jié)點(diǎn)的范圍遍歷。

而對(duì)于二級(jí)索引,在 MyISAM存儲(chǔ)引擎中以與上圖同樣的方式實(shí)現(xiàn),這也說(shuō)明了 MyISAM的索引方式是“非聚集的”,與 Innodb的“聚集索引”形成了對(duì)比。

InnoDB索引的實(shí)現(xiàn)

聚集索引

與 MyISAM相同的一點(diǎn)是,InnoDB 也采用 B+Tree這種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn) B-Tree索引。而很大的區(qū)別在于,InnoDB 存儲(chǔ)引擎采用“聚集索引”的數(shù)據(jù)存儲(chǔ)方式實(shí)現(xiàn)B-Tree索引,所謂“聚集”,就是指數(shù)據(jù)行和相鄰的鍵值緊湊地存儲(chǔ)在一起,注意 InnoDB 只能聚集一個(gè)葉子頁(yè)(16K)的記錄(即聚集索引滿足一定的范圍的記錄),因此包含相鄰鍵值的記錄可能會(huì)相距甚遠(yuǎn)。

在 InnoDB 中,表被稱為 索引組織表(index organized table),InnoDB 按照主鍵構(gòu)造一顆 B+Tree (如果沒(méi)有主鍵,則會(huì)選擇一個(gè)唯一的并且非空索引替代,如果沒(méi)有這樣的索引,InnoDB則會(huì)隱式地定義一個(gè)主鍵來(lái)作為聚集索引),同時(shí)葉子頁(yè)中存放整張表的行記錄數(shù)據(jù),也可以將聚集索引的葉子節(jié)點(diǎn)稱為數(shù)據(jù)頁(yè),非葉子頁(yè)可以看做是葉子頁(yè)的稀疏索引。

下圖說(shuō)明了 InnoDB聚集索引的實(shí)現(xiàn)方式,同時(shí)也體現(xiàn)了一張 innoDB表的結(jié)構(gòu),可以看到,InnoDB 中,主鍵索引和數(shù)據(jù)是一體的,沒(méi)有分開。:

這種實(shí)現(xiàn)方式,給予了 InnoDB 按主鍵檢索的超高性能。可以有目的性地選擇聚集索引,比如一個(gè)郵件表,可以選擇用戶ID來(lái)聚集數(shù)據(jù),這樣只需要從磁盤讀取較少并且連續(xù)的數(shù)據(jù)頁(yè)就能獲得某個(gè)id的用戶全部的郵件,避免了讀取分散頁(yè)時(shí)所耗費(fèi)的隨機(jī)I/O。

輔助索引

而對(duì)于輔助索引,InnoDB采用的方式是在葉子頁(yè)中保存主鍵值,通過(guò)這個(gè)主鍵值來(lái)回表(上圖)查詢到一條完整記錄,因此按輔助索引檢索實(shí)際上進(jìn)行了二次查詢,效率肯定是沒(méi)有按照主鍵檢索高的。下圖是輔助索引的實(shí)現(xiàn)方式:

由于每個(gè)輔助索引都包含主鍵索引,因此,為了減小輔助索引所占空間,我們通常希望 InnoDB 表中的主鍵索引盡量定義得小一些(值得一提的是,MySIAM會(huì)使用前綴壓縮技術(shù)使得索引變小,而InnoDB按照原數(shù)據(jù)格式進(jìn)行存儲(chǔ)。),并且希望InnoDB的主鍵是自增長(zhǎng)的,因?yàn)槿绻麈I并非自增長(zhǎng),插入時(shí),由于寫入時(shí)亂序的,會(huì)使得插入效率變低。

最后,我們要知道,B-Tree索引適用于等值匹配、范圍匹配、鍵前綴匹配,這里的前綴指的是最左前綴。

測(cè)試

分別建立相同字段、索引列相同的倆長(zhǎng)表,一個(gè)引擎是myisam, 一個(gè)是innodb

創(chuàng)建隨機(jī)生成字符串和數(shù)字的函數(shù),用于數(shù)據(jù)插入

3. 創(chuàng)建批量插入數(shù)據(jù)的函數(shù)

測(cè)試準(zhǔn)備工作完成,開始

數(shù)據(jù)量在1w時(shí),索引查詢和非索引查詢區(qū)別不大(紅色箭頭處為查詢時(shí)間 單位秒)

數(shù)據(jù)量10W 索引查詢區(qū)別不大, 非索引字段查詢myisam要快些

數(shù)據(jù)量100w時(shí) 非索引字段查詢myisam引擎的優(yōu)勢(shì)彰顯出來(lái)了

數(shù)據(jù)量500w時(shí) 非索引字段查詢myisam引擎的優(yōu)勢(shì)彰顯出來(lái)了

索引查詢倆個(gè)引擎差不多,但是非索引查詢差別就很明顯了,innodb耗時(shí)10s以上,而myisam只有0.6s

總結(jié)

MYIASM和INNODB查詢使用索引時(shí)性能相差無(wú)幾

但全表掃描時(shí)MYIASM查找的性能要好很多

標(biāo)簽:聚集,查詢,索引,innode,InnoDB,myisam,mysql,主鍵

來(lái)源: https://blog.csdn.net/qq_35623773/article/details/114682703

總結(jié)

以上是生活随笔為你收集整理的mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。