ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySql-索引

2020-07-30 19:32:30  阅读:26  来源: 互联网

标签:存储 Tree 主键 索引 InnoDB MySql 节点


一、索引的本质

没有索引的sql是没有灵魂的,查询速度是非常慢的。

本质:索引是帮助MySql快速获取数据排好序数据结构

二、 索引数据结构:

二叉树 :层级太高,自增主键索引甚至退化成了链表

红黑树 :红黑树是平衡二叉树的一种,相对于二叉树好点,但是当数据大时,层级还是很高,查询速度慢。

Hash表

B-Tree :

1.叶节点具有相同的 深度,叶节点的指针为空

2.所有索引元素不重复

3.节点中的数据索引从左到右递增排序

 

 

B+-Tree :B-Tree变种

1.非叶子节点不存储data,只储存索引(冗余),可以放更多的索引

2.叶子节点包含所有索引字段

3.叶子节点用指针连接,提高区间访问的性能

 

 

三、存储引擎索引

下面根据两个存储引擎所有进行下分析:MyISAM存储引擎索引、InnoDB存储引擎索引

MyISAM存储引擎索引:

MyISAM索引文件和数据文件是分离的(非聚集)

 

 

InnoDB索引实现(聚集)

1.表数据文件本身就是按B+Tree组织的一个索引结构文件

2.聚集索引-叶节点包含了完整的数据记录

 

 

 

 

问题1:为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?

如果不主动为InnoDB表建立主键,sql会去找该表中不具有重复数据的列作为唯一导航,如找不到不重复的列,sql则会自动创建一个隐士的列作为唯一导航。性能会降低。

整形比对大小时速度快,如果用字符串比较大小可能会从头部比较到尾部,占空间和性能也会很大

 

问题2:为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

InnoDB索引的工作原理是:根据非主键索引查询时,先根据非主键索引查询到子节点获取到该主键索引,再根据主键索引查询到目标数据。保证了索引的一致性、节省了存储空间。

 

标签:存储,Tree,主键,索引,InnoDB,MySql,节点
来源: https://www.cnblogs.com/BounceGuo/p/13405909.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有