【MySQL】高性能的索引
【MySQL】高性能的索引
1、B-Tree
B-Tree索引适用于全键值、键值范围或者键前缀查找(最左前缀)。
- 全值匹配
- 匹配最左前缀
- 匹配列前缀
- 匹配范围值
- 精准匹配某一列并范围匹配另外一列
- 只访问索引的查询
2、B树索引优点:
- 数值临近的索引,在存储空间上临近,可以为 order by 、 group by 提供优化手段
- 索引中备份了构成给索引的字段值,如果查询请求只需要这些字段,可以避免回表查询整行数据
3、索引评价三星指标:
- 是否将相关的行临近存放
- 存放顺序是否和查询顺序一致
- 是否包含查询需要的列
4、联合索引存储结构
5、高性能索引策略
1、独立列,指索引列不能是表达式的一部分,也不能是函数参数
2、前缀索引和索引选择性
MySQL不允许索引BLOB
,TEXT
,或者很长的VARCHAR
类型的列完整长度。所以对这种列只能使用前缀索引,选择足够的长度以保证较高的选择性。
---前缀索引
ALTER TABLE TABLE_NAME ADD KEY (列(长度));
--- 例如
ALTER TABLE A1 ADD KEY (colum1(7))
3、多列索引
如果 EXPLAIN
某语句使用了index_merge
,需要检查索引建的是否合理。
mysql> EXPLAIN SELECT film_id, actor_id FROM film_actor
-> WHERE actor_id = 1 OR film_id = 1\G
*************************** 1. row **************************
id: 1
select_type: SIMPLE
table: film_actor
type: index_merge
possible_keys: PRIMARY,idx_fk_film_id
key: PRIMARY,idx_fk_film_id
key_len: 2,2
ref: NULL
rows: 29
Extra: Using union(PRIMARY,idx_fk_film_id); Using where
4、选择合适的索引顺序
选择索引列顺序的经验法则:将选择性最高的列放到索引最前列。(适应大部分情况)。
6、聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。
数据在InnoDB中存储示例图:
聚簇索引示意图:
二级索引(普通索引)示例图
聚簇索引与非聚簇索引对比图:
在InnoDB数据库,避免使用类似UUID这种无序数据作为主键。
使用UUID主键大量插入数据后,用 ANALYZE TABLE 重建索引的统计数值。
好学若饥,谦卑若愚
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?