索引
约 598 字大约 2 分钟
2024-09-26
提问
- 索引有哪些类型? 一般如何使用?
- 索引用的哪些数据结构?
- B+ 树是一种什么样的树, 为什么可以提高查询速度?
- B+ 树的叶子节点的指针对索引的优势体现在哪里?
- 命中了主键索引之后查询的时间复杂度是多少?
- 联合索引的最左匹配, 是针对什么场景?
- 现在有 ( A, B, C ) 的联合索引, 查询 ( B, C ) 的时候是否会命中联合索引?
索引的类型
- 普通索引
- 主键索引: 不允许 null 值
- 唯一索引: 允许 null 值
- 联合索引: 多个字段
- 全文索引: 用于优化匹配字符串中的关键词
LIKE '%xxx'
一般如何建立索引?
适合建立索引的字段
- 频繁查询的字段。
WHERE
和ON
出现的字段。
因为 SQL 的优先级顺序为: FROM
> JOIN
> WHERE
> GROUP BY
> HAVING
> SELECT
> DISTINCT
> ORDER BY
>LIMIT
. 3. 有序的字段。 4. 区分度高的字段: 简单来说就是值的种类较多的。
不适合创建的字段
- 区分度低: 比如'性别'这种字段。
- 频繁更新的。
- 过长的字段。
- 无序的。
索引的数据结构
MySQL 使用的数据结构是 B+ 树.
与 B 树的区别
B+ 树的中间节点不存放数据, 而 B 树的中间节点存放数据。
优势
- I/O 少。
由于中间节点不存放数据, 所以同样大小的节点可以存储更多的索引。这会导致 B+ 树比 B 树更加的"矮", 减少了磁盘的 I/O. 2. 范围查询。
B+ 树的叶子节点之间存在横向的指针。如果查询的是一个范围内的数据, 无需从根节点重新查找, 可以从叶子节点直接横向访问。
最左匹配原则
当同时有多个字段的索引时, 最左边的索引将会生效。
联合索引生效
联合索引 ( A, B, C )
意味着创建了 A
, ( A, B )
和 ( A, B, C )
三个索引。
如果联合索引 ( A, B, C )
, 查询 ( B,C )
时联合索引将不会生效, 查询 ( A, C )
时只有 A
的索引生效。
命中索引后的查询复杂度
O(logN)
贡献者
更新日志
2025/8/5 08:34
查看所有更新日志