[MySQL]关于索引的理解

一、索引

在MySQL数据库中索引是一种数据结构——B+树,使用索引将提高大数据量表的查询速度。可能到这没法理解为什么建立索引检索速度就提高了呢?

二、B+树

B树(平衡二叉树)的变种,显著特点有查询效率更稳定、结点中元素个数=子树元素个数。

详细介绍看这后面这篇博客,什么是B+Tree——冬瓜蔡

三、聚集索引

MySQL中设定主键为聚集索引,不可更改。建立聚集索引后,根据主键字段生成B+树。

该棵树的叶子节点中每个元素包含了该条记录的所有列,聚集索引与非聚集索引的一大差别就体现在这。

比如下面这张学生成绩表:

idnamescore
1张三90
2李四85
.........
100小明100

 

如果id是主键,聚集索引。那么代表索引的那棵B+树可能长成下面这样:

所以当你使用类似下面以id作为where查询条件的SQL时,会自动检索这棵树,而不是原始的存储结构(猜想是数组)。

SELECT id,name.score WHERE id = 1;

当检索到结点元素值为25时,一同查询到了名字和分数这两个非索引字段,此过程不存在二次查询。

所以索引查的是B+树,当数据量大时,检索速度当然要比遍历来的快!

三、非聚集索引

当然,它也是B+树,但是叶子节点长的和聚集索引生成的树不一样。还是上面的成绩表,如果以id字段建立索引:

CREATE INDEX 索引名 ON table_name(id);

那么这课树可能长下面这样:

此时查询where条件为id,检索该棵树,仅在select字段(投影)都被当前索引覆盖才不会进行二次查询。

-- 使用非聚集索引,索引覆盖查询字段,不发生二次查询
SELECT id where id=1;

-- name字段需的值要通过指针二次查询
SELECT id,name where id=1;

四、总结

  1. 建立索引将创建B+树,条件为索引字段的查询为对树的检索;
  2. 聚集索引比非聚集快,非聚集可能存在二次查询,可以通过复合索引解决;
  3. 在数据量大的情况下,对树(索引)的检索比遍历数组快;
  4. 索引应当在表创建时建立,索引字段不宜频繁修改。

更多关于索引更详细的介绍可以看后面这篇文章,聚集索引与非聚集索引的总结——{-)大傻逼

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值