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

测试数据以及表结构
在这里插入图片描述
一、 创建主键(主键=主键索引=聚集索引)

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

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

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值