mysql 索引
概念
是存储引擎用于快速找到记录的一种数据结构
类型
B-Tree
-
适用类型
- 全值匹配
- 最左前缀
- 列前缀
- 范围值
- 精确匹配某一列并范围匹配另外一列
- 只访问索引
哈希
-
自适应哈希
-
适用类型
- 精确匹配每一行
-
优点 O(1)
-
缺点
- 不能避免读取行
- 无法排序
- 不能使用前缀索引等部分索引列
- 只支持等值比较
- 有很多 hash 冲突的时候回很慢
- Hash 冲突多的话维护代价高
空间数据
- 地理数据
全文
- 查找文本中关键词
优点
减少服务器扫描的数据量
帮助服务器避免排序和使用临时表
可以将随机 I/O 变为 顺序 I/O
三星索引
1️⃣索引将相关记录放到一起
2️⃣索引中的数据顺序和查找中的排序顺序一致则获得二星
3️⃣索引中的列包含了查询中需要的全部列(使用了覆盖索引)
聚簇索引
Innodb 将数据行和索引放到了同一个结构中
优点
- 可以把相关数据放到一起
- 数据访问更快。在同一个 btree 上
- 使用覆盖索引扫描的查询可以直接使用叶节点的主键值
索引与锁
可以让查询锁定更少的行
选择和编写索引的三个原则
单行访问很慢
按顺序访问范围数据是很快的
索引覆盖查询是很快的
XMind: ZEN - Trial Version

网友评论