定义

索引是帮助MySQL高效获取数据的数据结构

优点

1,提高数据检索效率,降低数据库IO成本
2,创建唯一所以,保证数据唯一性
3,在使用分组和排序时,可以显著减少查询中分组和排序的时间,降低了CPU的消耗

缺点

1,创建索引和维护索引要耗费时间,随着数据量提升,维护耗费的事件也随之增加
2,索引需要占据磁盘空间
3,虽然提高了查询速度,但是却会降低更新表的速度,因为改动数据时,索引也需要维护,这样就降低了维护速度

索引数据结构

innodb和myisam都是B+树索引

聚簇索引和非聚簇索引

非聚簇索引也常常被称为二级索引或者辅助索引

聚簇索引

image.png

回表

非聚簇索引叶子节点只会保存索引与主键的值,通过辅助索引查询其他列的数据(不存在索引覆盖的情况时),需要回表通过聚簇索引查询
image.png

联合索引

联合索引(多个列构成一个索引)也只会构成一颗B+数,同时按照多个列的比较进行排序

MyISAM中的索引方案

MyISAM引擎使用B+Tree作为索引,叶子节点的data域存放的是数据记录的地址

MyISAM与Innodb对比

MyISAM的索引方式都是“非聚簇”的,与innodb包含1一个聚簇索引是不同的,
1,在innodb存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应记录,而在MyISAM中却需要进行一次回表操作,意味着MyISAM中建立的索引全是二级索引

2,innodb的数据文件本身就是索引文件,而MyISAM索引文件和数据文件是分离的

3,innodb的非聚簇索引data域存储相应记录主键的值,而MyISAM索引记录的地址,总而言之,innodb的所有非聚簇索引都引用主键作为data域

4,myisam比innodb回表更快,因为它是拿着偏移地址进行访问

5,innodb必须要有主键,如果没有innodb会自动生成一个隐式的6字节的长整型