Mysql的索引结构,普通索引,哈希索引,聚簇索引和非聚簇索引区别

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针

按存储结构分:Btree索引、hash索引
按数据和索引存储方式分:聚簇索引、非聚簇索引
按索引类型分:主键索引、唯一索引、普通索引、组合索引、全文索引

普通索引(b+树)

优点:

总体查询效率高,
支持范围查询
B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确(这个很好理解,由于B-树节点内部每个 key 都带着 data 域,而B+树节点只存储 key 的副本,真实的 key 和 data 域都在叶子节点存储。前面说过磁盘是分 block 的,一次磁盘 IO 会读取若干个 block,具体和操作系统有关,那么由于磁盘 IO 数据大小是固定的,在一次 IO 中,单个元素越小,量就越大。这就意味着B+树单次磁盘 IO 的信息量大于B-树,从这点来看B+树相对B-树磁盘 IO 次数少。)

点评:由于B树的节点都存了key和data,而B+树只有叶子节点存data,非叶子节点都只是索引值,没有实际的数据,这就时B+树在一次IO里面,能读出的索引值更多。从而减少查询时候需要的IO次数!

缺点:
因为所有数据都存在叶子节点,所以在特定场景下,查询效率不如b树(当查找的数据离根节点很近的场景)


#### hash索引:数组+链表

优点:
查找速度快,理论上的时间复杂度为O(1);前提是不存在哈希冲突

缺点:
只支持等值查找,不支持范围查询
不支持索引排序,不支持联合索引的最左前缀匹配规则
存在哈希冲突时,需要遍历链表,查询效率降低











































































































































































































































©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容