【MySQL】高性能的索引

【MySQL】高性能的索引


1、B-Tree

B-Tree索引适用于全键值、键值范围或者键前缀查找(最左前缀)。

  1. 全值匹配
  2. 匹配最左前缀
  3. 匹配列前缀
  4. 匹配范围值
  5. 精准匹配某一列并范围匹配另外一列
  6. 只访问索引的查询

2、B树索引优点:

  1. 数值临近的索引,在存储空间上临近,可以为 order by 、 group by 提供优化手段
  2. 索引中备份了构成给索引的字段值,如果查询请求只需要这些字段,可以避免回表查询整行数据

3、索引评价三星指标:

  1. 是否将相关的行临近存放
  2. 存放顺序是否和查询顺序一致
  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 重建索引的统计数值。

posted @   二月无雨  阅读(65)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示