持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
索引相关知识一
前文
索引是一种常用的数据查询中的优化手段,通过索引的建立能够显著的提高查询的效率。本人将从个人角度讨论一些索引相关的内容,内容主要是作为笔记,其中难免也存在一定问题,不完全准确。
什么是索引
索引可以简单的认为是数据库的一种单独存储结构,它主要是会对实际的表中数据进行指向性的操作。索引可以理解为书记的目录,通过索引能够快速的进行书籍中内容的查找,同时会有排序的效果。但数据插入和修改时由于需要进行索引数据的更新,自然也会产生负面的效率影响。
索引的分类
索引可以按照多种方式进行分类,每种分类的结果也就有所区别。简单来提出几个常见的索引:主键索引-数据为主键内容,自然也不允许为空值、唯一索引-每条数据都是唯一的、但允许空值、普通索引-没有具体数据的要求,只是常规的索引结构、聚簇索引-对于innoDB而言,每条数据都会被完整的存储在聚簇索引中、另外还有全文索引等等针对特定数据类型的索引。
索引的数据结构
常见的索引结构主要有hash、b tree以及b+ tree等结构进行索引存储。hash主要是应用于准确值查询,不支持范围查找;b tree则是一种二叉平衡树的进化,每条数据都会被存储到tree节点的内部,但也正因如此当数据量很大时,会使得树的层高变得特别高,显著的减低查询效率,同时它也不支持范围查找;b+ tree是b tree的一种优化,支持范围查找,它将所有的数据都存储在叶子节点当中,也就保证了树的层高能够被控制住,所有数据都会到叶子节点中查询。
索引的工作方式
对于不同的引擎,索引的存储方式还有所不同。myISAM引擎会将数据的地址存储在叶子节点当中,当我们查找到叶子节点后,根据地址的信息去获取实际的数据。而对于常用的innoDB来讲,叶子节点会存储主键的信息,当然聚簇索引会存储完整的信息。因此当非聚簇索引查找时,查到主键后会到聚簇索引中进行回表操作,获取实际的数据内容。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。