MYSQL索引结构学习笔记
?mysql 的數(shù)據(jù)、索引、DDL 等數(shù)據(jù),都是以文件形式存儲(chǔ)的,
? 所以導(dǎo)致每次查詢都是一次I/O操作,當(dāng)I/O操作過(guò)大時(shí),會(huì)嚴(yán)重影響效率
MYSQL索引結(jié)構(gòu):
?????????? mysql使用的是B+樹來(lái)存儲(chǔ)索引的,為什么不用其他的呢?
二叉樹 -> 根據(jù)二叉樹的概念,當(dāng)數(shù)據(jù)是遞增的時(shí)候,它的節(jié)點(diǎn)會(huì)一直增大下去
紅黑樹 -> 平衡二叉樹 -> 每個(gè)節(jié)點(diǎn)存一個(gè)值,同樣會(huì)導(dǎo)致節(jié)點(diǎn)過(guò)多
B 樹?? -> 每個(gè)節(jié)點(diǎn)可存多個(gè)值(解決紅黑樹太深的問題) ?->但是涉及到范圍查詢的時(shí)候,也會(huì)慢
B+樹?? -> 變種B樹 -> 葉子節(jié)點(diǎn) 有指針相連 (方便范圍查詢)
?
MYSQL引擎存儲(chǔ)結(jié)構(gòu):
myIsam 引擎 : 存儲(chǔ)數(shù)據(jù)單獨(dú)一個(gè)文件 .MYD? 存儲(chǔ)索引單獨(dú)一個(gè)文件 .MYI
innerdb引擎 : 一個(gè)文件 同時(shí)存 索引+數(shù)據(jù) .idb? (聚集索引)? 尋址快,
又為什么所有的data都存在葉子結(jié)點(diǎn)上?
mysql 默認(rèn)每個(gè)節(jié)點(diǎn)存16K數(shù)據(jù),如果每個(gè)節(jié)點(diǎn)都存 key+value 會(huì)導(dǎo)致每個(gè)節(jié)點(diǎn)的key變少,從而導(dǎo)致節(jié)點(diǎn)增多 ,導(dǎo)致樹H變高。
?
?
分享一個(gè)不錯(cuò)的數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)網(wǎng)站:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
總結(jié)
以上是生活随笔為你收集整理的MYSQL索引结构学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Maven项目中使用JUnit进行单元测
- 下一篇: MySQL的安装及使用教程