《高性能MySQL》-创建高性能索引

语言: CN / TW / HK

一、创建高性能索引

1.1 索引原理

...

1.2 索引分类

1.2.1 B+Tree

1.2.2 Hash

  1. 特点:
    • 哈希索引只包含哈希值和行指针,不存储字段值
    • 非值顺序存储,无法用于排序
    • 不支持部分索引列查询(哈希值计算使用全部索引列)
    • 只支持等值比较查询
    • 在哈希冲突少,查询速度快
    • 哈希冲突多,索引维护代价高
  2. 场景
    • 在数据仓库schema,需要关联很多查询表,哈希索引非常适合
    • 例如:url大字段的查找

1.2.3 空间数据索引(R-Tree)

...

1.2.4 全文索引

...

1.2.5 其他

...

1.3 高性能索引策略

1.3.1 独立列

1.3.2 前缀索引和索引选择性

1.3.3 多列索引

1.3.4 选择合适的索引列顺序

1.3.5 聚集索引

  1. 优点:
    • 数据索引合并减少IO
    • 数据访问更快
    • 可以使用覆盖索引
  2. 缺点:
    • 插入速度严重依赖于插入顺序
    • 更新聚集索引列代价很高
    • 在插入或者更新主键触发行移动,会造成页分裂
    • 二级索引(非聚集索引)占用空间
    • 二级索引如果没有使用覆盖索引,需要两次查找
  3. 优化在InnoDB表中按主键顺序插入行

1.3.6 覆盖索引

1.3.7 使用索引扫描来做排序

1.3.8 压缩索引(前缀压缩)

1.3.9 冗余和重复索引

1.3.10 删除未使用的索引

1.3.11 索引和锁

使用索引减少锁定行数。

1.4 优化

  • 支持多种过滤条件

  • 避免多个范围条件
  • 优化排序:索引排序
  • 维护索引和表:减少索引和数据的碎片
分享到: