Mysql索引基础, 索引优化, B树
什么是索引?
- 索引是数据表中一个或者多个列进行排序的数据结构。
- 索引能大幅提升检索速度。
- 创建、更新索引本身也会花费一些时间和空间。
索引类型,创建索引。
- 普通索引(CREATE INDEX)。
- 唯一索引,索引值必须唯一(CREATE UNIQUE INDEX)。
- 多列索引。
- 主键索引(PRIMARY KEY) ,一个表只能有一个。
- 全文索引(FULLTEXT INDEX), InnoDB不支持。
什么时候(字段)来创建索引
- 经常用做查询条件的字段(WHERE条件)。
- 经常用做表链接的字段。
- 经常出现在 order by, group by之后的字段。
创建索引有哪些需要注意的地方(最佳实践)?
- 非空字段(NOT NULL), Mysql很难对空值做查询优化。
- 作为索引的字段需要: 区分度高,离散度大, 不能有大量相同的值。
- 索引长度不能太长(字符串比较会耗费时间)。
索引失效
记忆口诀:模糊匹配,类型隐转,最左匹配。
- 以%开头的like语句,模糊搜索的时候,无法利用索引。
- 出现隐式类型转换(python查询的时候需要注意, python输入的查询值类型和数据库中的类型不一致的话,会无法利用索引)。
- 没有满足最左前缀原则
什么是B-Tree(Mysql使用的是B+ Tree)
表格看不明白可以使用数据结构可视化网站: https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
优点 | 缺点 | |
线性查找 | 无 | 慢 |
二分查找 | 速度快了 | 必须顺序排序,插入慢 |
HASH | 查询快 | 占用空间,不能储存大量数据 |
二叉查找树 |
查处查询都很快(log(n)) |
复杂度退化,不能储存大量数据 |
二叉平衡树 | 解决二叉查找树复杂度退化的问题 | 节点非常多的时候,树依然很高(因为只有两个儿子节点) |
多路查找树 | 一个父亲多个儿子节点 | 节点非常多的时候,树不会特别深。 |
多路平衡查找树(B-Tree) | 解决二叉查找树复杂度退化的问题,一个父亲多个儿子节点。 | 无 |
- 多路平衡查找树,每个节点最多m(m>=2)个孩子,成为m阶或者度。
- 叶节点具有相同的深度。
- 节点数据中的key从左到右递增的。
B-tree 有一个问题,不能实现范围查找!
B+ Tree是 B-Tree的变形
- 只在叶子节点带有指向记录的指针(可以增加树的度)。
- 叶子节点通过指针相连,实现了范围查询。
分类:
数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix