- 索引存儲在哪里披坏?
磁盤
擴展小知識點:局部性原理态坦,磁盤預(yù)讀 - 索引是什么?
索引是幫助mysql高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)棒拂。
索引類似大學(xué)圖書館建書目索引伞梯,可以提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫的IO成本帚屉。MySQL在300萬條記錄左右性能開始逐漸下降谜诫,雖然官方文檔說500~800w記錄,所以大數(shù)據(jù)量建立索引是非常有必要的攻旦。MySQL提供了Explain喻旷,用于顯示SQL執(zhí)行的詳細信息,可以進行索引的優(yōu)化敬特。 - 索引的結(jié)構(gòu)
B+Tree索引和Hash索引 -
數(shù)據(jù)庫請求過程
image.png - 索引文件存放的位置
innodb:聚簇索引掰邢,數(shù)據(jù)與文件放在一起。
文件后綴 frm 存放的是表結(jié)構(gòu)伟阔;ibd存放數(shù)據(jù)文件和索引文件;
默認情況下是把所有的數(shù)據(jù)文件放到表空間中掰伸,不會為每個單獨的表保存一份數(shù)據(jù)文件皱炉,需要設(shè)置如下屬性開啟:set global innodb_file_per_table=on
myisan:非聚簇索引,數(shù)據(jù)與索引單獨一個文件狮鸭。(僅作為了解) -
可選數(shù)據(jù)結(jié)構(gòu)
hash
image.png
image.png
樹
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的地址
https://visualgo.net/zh
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
image.png
image.png
image.png
image.png
image.png
image.png
涉及回表合搅。
image.png
索引的分類
1.主鍵索引
它是一種特殊的唯一索引多搀,不允許有空值。一般是在建表的時候指定了主鍵灾部,就會創(chuàng)建主鍵索引康铭, CREATE INDEX不能用來創(chuàng)建主鍵索引
2.唯一索引
與普通索引類似,不同的就是:索引列的值必須唯一赌髓,但允許有空值从藤。如果是組合索引,則列值的組合必須一
3.普通索引
這是最基本的索引锁蠕,它沒有任何限制夷野。(覆蓋索引)
4.全文索引(代替產(chǎn)品es)
FULLTEXT索引用于全文搜索。只有InnoDB和 MyISAM存儲引擎支持 FULLTEXT索引和僅適用于 CHAR荣倾, VARCHAR和 TEXT列 (倒排索引)
5.組合索引
最左匹配原則索引下推
索引下推Mysql5.6的版本上推出悯搔,在非主鍵索引上的優(yōu)化,可以有效減少回表的次數(shù)舌仍,大大提升了查詢的效率妒貌。索引維護
待續(xù).....