【TiDB 4.0 PCTA 学习笔记】- 3.7.4 TiDB Indexes(TiDB 的索引) @2班+李响

课程名称:3.7.4 TiDB Indexes(TiDB 的索引)

学习时长:

30分钟

课程收获:

了解 TiDB 中的索引以及使用和管理这些索引的方式。

课程内容:

一、TiDB indexes overview
1.Unique indexes and primary indexes

  • 唯一索引
    • 代表索引列的值都是唯一的
    • 可以插入多个Null值
  • 主键索引
    • 逻辑上是唯一索引加上非Null值的约束
      *聚束索引
    • 红色部分为索引的key,蓝色部分为索引的value
    • 在MySQL innodb存储引擎中主键就是聚束索引
  • 非聚束索引
    • 由两部分组成,第一部分为上面的主表其中他的key(row_id)由数据库自动生成;下面一部分为主键索引其中(key)对应的value是主表的key
    • 如果查询a列的值为查询条件时可能会出现回表操作,先去主键索引中查找row_id,然后回到主表中查找到b和c
    • 大多数情况下,聚束索引要比非聚束索引好
    • 如果主键上有热点时,聚束索引无法通过shard_row_id打散热点,非聚束索引可以打散热点
  • TiDB4.0中主键索引要为聚束索引需要具备以下两点
    • alter-primary-key值为false
    • 主键必须是一个整数的列
  • 在TiDB 5.0会完整的支持聚束索引(支持char、decimal)
  1. Multiple-Column indexes
  • 索引可以建立在多个列上,在某些情况下可以加速查询
  • 最左前缀匹配原则
    • 首先创建一个索引建立在三个列上(a,b,c)
    • 最左前缀原则,这个索引可以用在(a)、(a,b)和(a,b,c)三种情况下
    • 如果查询条件是用在以上三种情况下是可以用上多列索引
  1. 表达式索引
  • 表达式索引非常有用且强大,与一般的索引不同,他可以建立在表达式上,对于复杂查询非常有用
  • 以上示例中查询使用了%(模糊匹配)可以通过表达是索引为其建立索引
  1. 前缀索引
  • 前缀索引为在索引列中值的前面一部分
  • 可以支持CHAR、VARCHAR、BINARY和VARBINARY这四种类型指定
  • 对于BLOB和TEXT必须指定
  • 优点为可以获得更好的查询性能,且存储占用小

二、TiDB Index management

  1. Index related system tables
  1. Indexes hints
  • Use a specified index
    USE INDEX([idx1_name][, idx2_name…])
  • 示例
    • select * from t use index(t1);
    • select * from t force index(t1);
  • Ignore index
    IGNORE INDEX([idx1_name][, idx2_name…])
  • 示例
    • select * from t ignore index(t1);
    • select * from t use index();

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!