简单例子理解主键,索引,聚集索引,复合索引,非聚合索引

测试数据以及表结构
简单例子理解主键,索引,聚集索引,复合索引,非聚合索引_第1张图片
一、 创建主键(主键=主键索引=聚集索引)

  1. 主键是什么?
    答:拿主键可以唯一确定一条数据,它和物理存储排序一致,不能为空,一个表只能有一个。
    原本没有创建的主键的表在磁盘上存储为:
    Id=0;username=username0;sex=男;address=浙江;
    Id=1;username=username1;sex=女;address=北京;
    Id=2;username=username2;sex=男;address=北京;

在创建主键之后变成了如下图树结构:
简单例子理解主键,索引,聚集索引,复合索引,非聚合索引_第2张图片
通过上图展示之后,大数据下不加主键查询速度为O(n),B-TREE查询速度为O(log n)。你想啊,不加主键就相当于从第一个挨着问,你是不是我想要的,当数据量是上亿的,你就得问一亿次。而B-tree就不一样了,它是二叉查找,上亿的数据最多十几层就出来了,这效率一看,果断要加主键啊。

通过上面我们可以看到,设置ID为主键后,每个叶子节点存储的都是完整的数据。由于结构是树,所以在插入删除的时候,为了保持平衡。一直都要修改位置。所以慢。
二、创建普通索引(非聚集索引)
1.索引是什么?
答:索引是可以为null的
给userName创建索引之后:
简单例子理解主键,索引,聚集索引,复合索引,非聚合索引_第3张图片
每个叶子节点存放的是主键+索引列,
当我们要执行以下sql时,
select * from myindex where username=‘username1’
流程为:先拿索引userName找到等于’username1’的,找到他的主键=1,再从图一中找响应的完整数据。索引先找主键,再通过主键找数据。所以说,主键为什么唯一,这里就可以解释清楚了。这里在提一下,创建索引一般都是where条件的列,这就不解释了吧。所以索引和主键的关系就是这么个理。
当然万事都有例外,请看第三点。
简单例子理解主键,索引,聚集索引,复合索引,非聚合索引_第4张图片
三、复合索引
就是多个列组成一个索引,普通索引就是单列。这里已userName+sex为例。每个叶子节点存放的是主键+索引列
简单例子理解主键,索引,聚集索引,复合索引,非聚合索引_第5张图片
当我们执行如下sql时;
select sex from myindex where username=‘username1’
流程为:先拿索引userName+sex找到它的地址,咦,我们不是刚好查找sex么,此时这里就有sex啊,程序就走到这就查询出来了,省了后面的步骤。当然了,同学就想那我冷怂的加索引啊,老衲给你一条建议,通过先人们研究索引最好不要超过6个,插入删除会很慢的。

你可能感兴趣的:(简单例子理解主键,索引,聚集索引,复合索引,非聚合索引)