如何设计高效的索引策略?
如何设计高效的索引策略?
一、索引基础概念
1.1 什么是索引?
索引是数据库中用于加速数据检索的数据结构,类似于书籍的目录。它通过建立键值对(Key-Value)映射关系,将查询字段与物理存储位置关联。
1.2 索引的核心作用
- 加速查询:特别是WHERE、JOIN、ORDER BY等操作
- 保证唯一性:通过唯一索引实现
- 优化排序:避免全表扫描的filesort操作
关键结论:索引的本质是用空间换时间,通过额外的存储开销换取查询性能提升
二、索引类型选择策略
2.1 B-Tree索引
B-Tree(实际多为B+Tree)是最常用的索引结构:
- 适合范围查询(>、<、BETWEEN)
- 支持前缀匹配(LIKE ‘abc%’)
- 默认的索引类型
2.2 哈希索引
- 仅支持等值查询(=、IN)
- 不支持排序和范围查询
- 内存数据库常用(如Redis)
2.3 全文索引
- 用于文本搜索(MATCH AGAINST)
- 支持语义分析和关键词提取
- 倒排索引实现(如Elasticsearch)
2.4 空间索引(R-Tree)
- 处理地理数据(GIS)
- 支持距离计算、区域包含等操作
关键结论:根据查询模式选择索引类型,B-Tree适用于80%以上的常规场景
三、索引设计原则
3.1 选择性原则
选择性(Selectivity)是设计索引的首要考量:
选择性 = 不重复值数量/总记录数
- 高选择性字段(如ID)优先建索引
- 低选择性字段(如性别)通常不适合单独建索引
3.2 最左前缀原则
对于复合索引(A,B,C):
- 有效查询:
WHERE A=1 AND B=2
、WHERE A=1
- 无效查询:
WHERE B=2
(无法使用索引)
3.3 覆盖索引优化
当索引包含查询所需全部字段时: