温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库索引该怎么选型

发布时间:2026-11-01 20:27:24 来源:亿速云 阅读:86 作者:小樊 栏目:数据库

数据库索引的“选型”本质上是在查询性能、写入性能、存储成本、维护复杂度之间做权衡。下面按“思维框架 → 常见索引类型 → 选型建议 → 实战示例”来讲。


一、先问自己 4 个问题(选型前提)

在选索引前,先明确:

  1. 查询模式是什么?

    • 点查(=)
    • 范围查(>, <, BETWEEN)
    • 排序(ORDER BY)
    • 模糊查(LIKE)
    • 多条件组合
  2. 写入频率高不高?

    • 高写入 → 索引越少越好
    • 读多写少 → 可多加索引
  3. 数据量和分布如何?

    • 高基数列(如 user_id)适合索引
    • 低基数列(如 gender)不适合单列索引
  4. 用的是哪种数据库?


二、常见索引类型 & 适用场景

1. B+Tree 索引(最常用)

适用:

  • 等值查询
  • 范围查询
  • 排序

典型使用:

  • MySQL 的 InnoDB 默认索引
  • 主键、外键、常用 WHERE 字段

✅ 适合:WHERE a = ?、WHERE a > ? ORDER BY b


2. 联合索引(复合索引)

原则:最左前缀匹配

INDEX(a, b, c)

能用到索引的:

  • a = ?
  • a = ? AND b = ?
  • a = ? AND b = ? AND c = ?

用不到的:

  • b = ?
  • c = ?

✅ 建议:

  • 区分度高的字段放前面
  • 常用于 WHERE + ORDER BY 组合

3. 唯一索引

适用:

  • 业务唯一约束(手机号、邮箱)
  • 防止脏数据

✅ 比普通索引略快(不用查重)


4. 覆盖索引(性能利器)

INDEX(user_id, status)
SELECT status FROM order WHERE user_id = 1;

✅ 不需要回表
✅ 极大提升性能


5. 哈希索引

适用:

  • 纯等值查询(=)
  • 不支持范围、排序

❌ MySQL InnoDB 不支持(Memory 引擎支持)
✅ Redis / Memcached 本质是哈希


6. 全文索引(Full Text)

适用:

  • 文章内容搜索
  • 模糊匹配 %关键词% 很慢时

✅ MySQL / ES
❌ LIKE ‘%xx%’ 不适合大表


7. 空间索引(GIS)

适用:

  • 地图、经纬度
  • 附近的人

✅ PostGIS / MySQL SPATIAL


8. 倒排索引(ES / Lucene)

适用:

  • 搜索系统
  • 多字段组合检索

三、索引选型速查表

场景 推荐索引
主键 聚簇索引(InnoDB)
高频等值查询 B+Tree / 唯一索引
多条件查询 联合索引
排序 + 过滤 联合索引(WHERE+ORDER)
只查少数字段 覆盖索引
模糊搜索 全文索引 / ES
高写入表 少索引
低基数字段 不加或函数索引

四、常见错误 ❌

  1. 索引越多越好 → 写入爆炸
  2. 对函数列建索引
    WHERE DATE(create_time) = '2024-01-01'
    
    应改为范围
  3. 低基数字段单列索引
  4. 联合索引顺序错

五、实战示例

订单表:

WHERE user_id = ? AND status = ? ORDER BY create_time DESC

✅ 推荐索引:

INDEX(user_id, status, create_time)

如果你愿意,可以告诉我:

  • 用的什么数据库
  • 表结构
  • 典型 SQL

我可以直接帮你设计索引方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手