數(shù)據(jù)庫引擎
Innodb和MyISAM的區(qū)別
Innodb 支持行鎖 支持表鎖 支持事務(wù) 支持外鍵 數(shù)據(jù)存儲時索引和數(shù)據(jù)在一起
MyISAM 支持表鎖 不支持事務(wù) 數(shù)據(jù)存儲方式 數(shù)據(jù)和索引兩個單獨(dú)的文件夾
Innodb:.frm文件+.idb文件(包含數(shù)據(jù)和索引)
MyISAM:.frm文件+數(shù)據(jù)文件+索引文件
常見索引
主鍵索引 唯一索引 普通索引 聯(lián)合索引
主鍵索引:葉子節(jié)點(diǎn)中存儲全量數(shù)據(jù)
唯一索引:索引鍵值不能重復(fù)
普通索引:葉子節(jié)點(diǎn)中存儲主鍵ID,不存儲全量數(shù)據(jù)
聯(lián)合索引:對表中多個列進(jìn)行索引妨退,區(qū)別是聯(lián)合索引的鍵值數(shù)量大于1妇萄,檢索時遵循最左匹配原則蜕企。
如聯(lián)合索引(a,b),先對索引a進(jìn)行排序冠句,然后對索引b進(jìn)行排序轻掩。b依賴于a,檢索時如果a的索引失效,b的索引也會失效
索引類別
聚簇索引 非聚簇索引
1.葉子節(jié)點(diǎn)中順序存儲數(shù)據(jù) 如主鍵索引
2.葉子節(jié)點(diǎn)中不存儲全量數(shù)據(jù)懦底,只存儲主鍵ID 如普通索引
普通索引檢索時先查到葉子節(jié)點(diǎn)中的主鍵ID唇牧,然后回表查詢,通過主鍵索引去查詢?nèi)繑?shù)據(jù)
索引查詢
覆蓋查詢 回表查詢
覆蓋查詢:只需要在一個索引樹上能查詢到所需數(shù)據(jù)聚唐,不需要回表查詢?nèi)繑?shù)據(jù)
回表查詢:普通索引葉子節(jié)點(diǎn)只存儲了索引值和主鍵ID丐重,查詢其它數(shù)據(jù)時需要根據(jù)主鍵ID進(jìn)行聚簇索引查詢,獲取到全量數(shù)據(jù)
索引數(shù)據(jù)結(jié)構(gòu)
B+樹
B+樹和B樹的區(qū)別拱层,B+樹中非葉子節(jié)點(diǎn)不存儲數(shù)據(jù)
B樹和平衡二叉樹的區(qū)別弥臼,B樹節(jié)點(diǎn)中可存儲多個鍵值
1.非葉子節(jié)點(diǎn)只存儲指針和索引鍵值,一個節(jié)點(diǎn)可存儲多個鍵值根灯,樹的高度一般是3到4階;
2.數(shù)據(jù)查詢的時候是分頁查詢径缅,每頁的磁盤空間大小是16kb;
3.索引使用int或者varchar類型,取決于占用空間大小烙肺,int占用4個字節(jié)纳猪,大于4個字節(jié)的用int,小于4個字節(jié)的用varchar桃笙;
4.聯(lián)合索引遵循最左原則氏堤;
5.索引并不是越多越好,越多占用磁盤空間越大搏明,插入數(shù)據(jù)時越耗時鼠锈;
6.索引字段的長度越短越好,字段越短非葉子節(jié)點(diǎn)存儲的鍵值越多星著;
7.普通索引檢索時先在非葉子節(jié)點(diǎn)中檢索出主鍵的ID值购笆,然后回表通過主鍵ID檢索數(shù)據(jù);
8.在未設(shè)置主鍵的表中加入一條數(shù)據(jù)虚循,會默認(rèn)增加一條主鍵rowid;
9.主鍵id最好設(shè)置成自增模式同欠,索引數(shù)據(jù)存儲是按序排列的,自增模式可以方便快速查詢横缔;