数据库索引的“选型”本质上是在查询性能、写入性能、存储成本、维护复杂度之间做权衡。下面按“思维框架 → 常见索引类型 → 选型建议 → 实战示例”来讲。
在选索引前,先明确:
查询模式是什么?
写入频率高不高?
数据量和分布如何?
用的是哪种数据库?
适用:
典型使用:
✅ 适合:WHERE a = ?、WHERE a > ? ORDER BY b
原则:最左前缀匹配
INDEX(a, b, c)
能用到索引的:
a = ?a = ? AND b = ?a = ? AND b = ? AND c = ?用不到的:
b = ?c = ?✅ 建议:
适用:
✅ 比普通索引略快(不用查重)
INDEX(user_id, status)
SELECT status FROM order WHERE user_id = 1;
✅ 不需要回表
✅ 极大提升性能
适用:
❌ MySQL InnoDB 不支持(Memory 引擎支持)
✅ Redis / Memcached 本质是哈希
适用:
%关键词% 很慢时✅ MySQL / ES
❌ LIKE ‘%xx%’ 不适合大表
适用:
✅ PostGIS / MySQL SPATIAL
适用:
| 场景 | 推荐索引 |
|---|---|
| 主键 | 聚簇索引(InnoDB) |
| 高频等值查询 | B+Tree / 唯一索引 |
| 多条件查询 | 联合索引 |
| 排序 + 过滤 | 联合索引(WHERE+ORDER) |
| 只查少数字段 | 覆盖索引 |
| 模糊搜索 | 全文索引 / ES |
| 高写入表 | 少索引 |
| 低基数字段 | 不加或函数索引 |
WHERE DATE(create_time) = '2024-01-01'
应改为范围订单表:
WHERE user_id = ? AND status = ? ORDER BY create_time DESC
✅ 推荐索引:
INDEX(user_id, status, create_time)
如果你愿意,可以告诉我:
我可以直接帮你设计索引方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。