关于索引

关于索引

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一下,性能损耗可以理解,但是多表关联查询,上千万的数据还是要分库分表。

 

联合索引

联合索引就是把每个单节点单值结构,处理成多值一个节点,上下结构

原文地址:https://www.cnblogs.com/HelloM/p/13568569.html