2、Mysql 创建索引

一、为什么需要索引?
索引是数据表种一个或者多个列进行排序的数据结构
索引能够大幅提升检索速度
创建、更新索引本身也会耗费空间和时间
二、查找结构进化史
线性查找:一个个找;实现简单;太慢
二分查找:有序;简单;要求是有序的,插入特别慢
HASH查找:查询快;占用空间;不太适合存储大规模数据
二叉查找树:插入和查询很快(log(n));无法存大规模数据,复杂度退化
平衡树:解决 BST 退化问题,树是平衡的;节点非常多的时候,依然树高很高
多路查找树:一个父亲多个孩子节点(度);节点过多树高不会特别深
多路平衡查找树:B-Tree
以下数据结构动画演示推荐这个网址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

这个网站关于数据结构的演示很直观,我们可以通过其中的动画来学习。

比如二叉查找树退化问题:

可以明显看到,由于我们输入的数字是顺序增长的,二叉查找树变成了单边增长的线性结构,这就是复杂度退化。

平衡树(AVL)则没有这个问题:

三、什么是 B-Tree?
多路平衡查找树(每个节点最多 m(m>=2) 个孩子,称为 m 阶或者度)
叶节点具有相同的深度
节点的数据 key 从左到右是递增的

演示:


四、什么是 B+Tree ?
Mysql 实际使用的 B+Tree 作为索引的数据结构
只在叶子节点带有指向记录的指针(For what?可以增加树的度)
叶子节点通过指针相连(For what?实现范围查询)


五、Mysql 创建索引类型有哪些?
普通类型(CREATE INDEX)
唯一索引,索引列的值必须唯一(CREATE UNIQUE INDEX)
多列索引
主键索引(PRIMARY KEY),一个表只能有一个
全文索引(FULLTEXT INDEX),InnoDB 不支持
六、如何创建合理的索引
经常用作查询条件的字段
经常用作表连接的字段
经常出现在 order by,group by 之后的字段
如何创建合理的索引可以参考下面的一篇博文,这里就不详细展开了哈。

如何创建合理的索引

七、索引如何优化
非空字段 NOT NULL,Mysql 很难对空值作查询优化
区分度高,离散度大,作为索引的字段值尽量不要有大量相同值
索引的长度不要太长(比较耗费时间)
索引如何优化可以参考下面的一篇博文,这里就不详细展开了哈。

MySQL怎么优化table scan的

八、什么是聚集索引和非聚集索引?
聚集还是非聚集指的是 B+Tree 叶节点存的是指针还是数据记录
MyISAM 索引和数据分离,使用的是非聚集索引
InnoDB 数据文件就是索引文件,主键索引就是聚集索引
聚集索引和非聚集索引可以参考下面的一篇博文,这里就不详细展开了哈。

聚集索引和非聚集索引的区别

对比如下:

辅助索引

还有一个辅助索引,我们也可以了解下。


————————————————
版权声明:本文为CSDN博主「riemann_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/riemann_/article/details/91358943

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值