一次搞懂MySQL(所有)索引及其区别
2022-03-09 14:57
1016 查看
索引的概念介绍
1、聚集索引
聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引 也就是说聚集索引的顺序就是数据的物理存储顺序。它会根据聚集索引键的顺序来存储表中的数据,即对表的数据按索引键的顺序进行排序,然后重新存储到磁盘上。因为数据在物理存放时只能有一种排列方式,所以一个表只能有一个聚集索引。 比如字典中,用‘拼音’查汉字,就是聚集索引。因为正文中字都是按照拼音排序的。而用‘偏旁部首’查汉字,就是非聚集索引,因为正文中的字并不是按照偏旁部首排序的,我们通过检字表得到正文中的字在索引中的映射,然后通过映射找到所需要的字。 聚集索引的使用场合为: a.查询命令的回传结果是以该字段为排序依据的; b.查询的结果返回一个区间的值; c.查询的结果返回某值相同的大量结果集。 聚集索引会降低 insert,和update操作的性能,所以,是否使用聚集索引要全面衡量。2、非聚集索引
非聚集索引:索引顺序与物理存储顺序不同 非聚集索引的使用场合为: a.查询所获数据量较少时; b.某字段中的数据的唯一性比较高时; 非聚集索引必须是稠密索引3、聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。术语“聚族”表示数据行和相邻的键值紧凑的存储在一起。因为无法同时把数据行放在两个不同的地方,所以一个表只能有一个聚族索引。 聚族索引的优点 可以把相关数据保存在一起。就好像在操场上战队,一个院系一个院系的站在一起,这样要找到一个人,就先找到他的院系,然后在他的院系里找到他就行了,而不是把学校里的所有人都遍历一遍 数据访问更快。聚族索引将索引和数据保存在同一个B-Tree中,因此从聚族索引中获取数据通常比在非聚族索引中查找更快4、稠密索引
稠密索引:每个索引键值都对应有一个索引项 稠密索引能够比稀疏索引更快的定位一条记录。但是,稀疏索引相比于稠密索引的优点是:它所占空间更小,且插入和删除时的维护开销也小。 5、稀疏索引 稀疏索引:相对于稠密索引,稀疏索引只为某些搜索码值建立索引记录;在搜索时,找到其最大的搜索码值小于或等于所查找记录的搜索码值的索引项,然后从该记录开始向后顺序查询直到找到为止。5、覆盖索引
如果一个索引包含(或覆盖)所有查询需要的字段的值,就成为覆盖索引。覆盖索引只需要扫描索引,不需要回表查找,能极大的提升性能。
有几点好处:
1.极大的减少数据访问量。
2.索引按照列值顺序存储,io密集型的范围查询比随机磁盘IO读取小的多。
3.由于InnoDB的聚簇索引,覆盖索引对InnoDB表特别有用。
注:当使用覆盖索引时,从的EXPLAIN 的extra列可以看到“Using index”的信息。
扩展:
mysql常见的两种的基于B+树的存储方式,一种是InnoDB,一种是MyISAM。虽然都是基于B+树的存储方式,但是也有点不同。 MyIsam 索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。主索引和辅助索引没有区别都是非聚集索引。索引页正常大小为1024字节,索引页存放在.MYI 文件中。MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。 InnoDB 也使用B+Tree作为索引结构,索引页大小16,和表数据页共同存放在表空间中。从InnoDB表数据存放方式可看出InnoDB表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。 InnoDB默认对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。一般来说,InnoDB 会以聚簇索引的形式来存储实际的数据,它是其它二级索引的基础。 所以mysql innodb引擎的聚集索引、聚簇索引都默认是主键索引,如果没有指定主键,就是一个具有唯一且非空值的索引,如果不存在这样的索引,就是InnoDB自定义的隐藏主键索引,并且该索引是稠密索引。相关文章推荐
- mysql索引创建的两种方法及其区别,以及哪些字段适合做索引
- 记一次MySql单列索引和联合索引的使用区别
- 一口气搞懂MySQL索引所有知识点
- 键、索引、约束及其区别
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
- Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别
- Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别
- MySQL修改表一次添加多个列(字段)和索引
- MySQL 每次查询一条数据查询十次与一次查询十条数据之间的区别
- mysql前缀索引及其选择
- MySQL的btree索引和hash索引的区别
- mysql找到所有索引
- Mysql 字段类型及其项目区别
- MySQL的btree索引和hash索引的区别
- Mysql 中的普通索引,主键,唯一索引,全文索引的区别
- MySQL B+树索引和哈希索引的区别
- MySQL 索引及其分类
- MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法
- MySQL的btree索引和hash索引的区别
- 实战:mysql统计指定架构的所有表的数据和索引大小情况