索引是帮助mysql高效获取数据的排好序的数据结构
结构:B Tree,Hash
B Tree:叶子节点有相同深度,每层有很多节点,节点中数据索引从左到右递增。
B Tree,比二叉树和红黑树(平衡二叉树)的层数少,查询效率高。
数据库保存在mysql数据库目录下的data目录下面,一个文件夹一个数据库,点击文件夹可以看到这个数据库所有的表。
BTree
B+Tree
hash
MyISAM数据引擎
.frm:表结构
.myd:表数据
.myi:索引文件
InnoDB引擎
.frm:表结构
.ibd:数据 和 索引
聚集索引(聚簇索引):索引叶子节点里保存了这一行所有的数据记录
非聚集索引:索引叶子节点里保存的是数据的地址
为什么建议InnoDB表必须设置主键,并且是整形自增。
1、Mysql内部组织表数据使用B树,B树要用数据唯一的一列。如果没有,Mysql会内部建一个唯一列(RowId)。
2、整形数据比大小,比字符串比大小简单。整形比字符串节省空间。
3、非自增的可能需要分裂之前的索引节点,就是插入新数据可能需要重建索引,消耗数据库资源。
Hash索引
对字段进行一次哈希运算,根据运算结果计算存储位置,大部分情况都使用B+Tree索引,而不是Hash索引,因为只支持= in,不支持范围查找(between and)