1、索引定义:是一种帮助mysql高效获取数据的数据结构。
使用用户任意指定的字段对数据进行排序的一种数据结构。
2、mysql索引使用的数据结构:B+Tree
3、索引分类:
聚集索引:叶节点包含了完整的数据记录(索引与数据行存在一起)。
非聚集索引:索引与数据行分开存放。
存储引擎是表维度上的概念。一个数据库可以创建不同存储引擎的数据表。
3.1 myisam存储引擎(非聚簇索引):索引文件和数据文件分离。
data目录下以.frm 、.MYD、.MYI结尾的三个文件。
.frm:表的表结构。
.MYD:表的数据记录(表的数据行)。
.MYI:表的索引。
查找过程:根据myi文件中索引找到数据在myd文件中的位置(B+tree的叶节点存储了数据的位置)。
3.2
innodb存储引擎(聚簇)(支持事务):
data目录下以.frm和.ibd(index、data)结尾的两个文件。
ibd文件存储了索引和数据。该存储引擎要求存储数据文件时就是以B+Tree存储的。
表数据文件本身就是按B+Tree组织的一个索引结构文件。
与myi比少了一次磁盘I/O。
问题:为什么innoDB必须有主键?为什么推荐使用整型的自增主键。
答:必须有一个B+Tree来组织数据文件。如果不指定主键,mysql也会自动生成一个主键(使用唯一列或自动加一列)。
整型所占用的存储空间较小,而且整型数据容易做比较(检索)。
使用自增主键更便于插入,避免或减少了B+Tree的调整。
聚集索引就是数据的物理存储顺序与列顺序一致。通俗讲就是物理上在前面的在表中也位于前面。