关于索引
关于索引
index--目录,索引,导航 相当于一个字典目录,查‘爱’,目录页查--A--ai
主键自动添加索引: 1,能够通过主键查询的尽量通过主键查询,效率高 2,索引和表相同,都存储在硬盘的文件中 3,索引和表相同都是一个对象
创建索引 1,建表的时候可以加索引 create table tmep( id int primary key auto_increment, idcard varchar(20) not null unique, index idx_idcard(idcard) ); 2,语法创建 create index 索引名称 on 表名(列名) create unique index 索引名称 on 表名(列名)
查看索引 show index from table(表名);
注意:使用索引,不要使用通配符*
删除索引 drop index 索引名 on 表名 drop index idcard on tmep; 如上查看索引中idcard索引消失了
索引原理 索引是帮助mysql高效获取数据的排好序的数据结构
二叉树存储数据进行检索:
地址编号用二叉树进行存储:
红黑数存储数据:
b_tree存储数据
b+_tree存储数据
两种树结构的区别: b_tree 树结构 1,叶子节点具有相同深度,叶子节点指针为空 2,所有索引不重复 3,节点中的数据从左往右依次递增
mysql采用b+tree结构,在叶子节点存储所有数据 1,非叶子节点不存储data,只存储索引(冗余),可以放很多列 2,叶子节点包含所有索引字段 3,叶子节点用指针链接,提高区域访问性能
b+tree存储节点 b+tree中的一层层级节点,称为一页数据,规定是16kb大小,16484byte大小 以bigint-8byte+ 地址存储字段-6byte = 14byte 16384/14 = 1170个【索引+地址冗余】节点
索引存储 高版本的mysql基本上会把非叶子节点全部存储在内存中,内存io要比磁盘io快的多,只有最后一步从磁盘上io一下,性能损耗可以理解,但是多表关联查询,上千万的数据还是要分库分表。
联合索引 联合索引就是把每个单节点单值结构,处理成多值一个节点,上下结构 |