唯一索引
- KEY: TableId_IndexId_IndexColumnValue
- VALUE: row_id
- 聚簇表:row_id=主键
- 非聚簇表: row_id = TidbRowID
二级索引
- KEY: TableID_IndexID_Index_ColumnsValue_{RowID1}{RowID2}...
- Value: null
二级索引可能重复,所以KEY可能会附带多个RowID,所以Value可以为空;
索引注意事项:
- 建表时添加或者ALTER TABLE ADD KEY 添加
- 目前只一条ALTER无法添加多个索引;
- 联合索引支持最左匹配原则
- 联合索引左侧必须是等值才会用到联合索引后面的部分;
- 索引覆盖不需要回表,从而提升性能;
- 表达式索引是一种特殊索引,可以将索引建立与表达式上;select @@tidb_allow_function_for_expression-index 查看哪些函数可以用于表达式;
不可见索引:
- 修改索引的可见性:ALTER TABLE t1 ALTER INDEX c1 INVISIBLE/VISIBLE;
- 不可见索引不会被查询优化器使用;
- 不可见索引仅仅对优化器而言,任然可以被修改和删除;
- 及时使用SQL Hint USE INDEX强制使用索引,优化器也无法使用不可见索引;
- 不允许将主键索引设置为不可见
TiDB和MySQL 索引区别:
- TiDB不支持FULLTEXT,HASH和SPATICAL索引
- 不支持降序索引
- 无法添加或者删除CLUSTERED类型的主键
- 可见/不可见只能单表修改,无法像mysql那样通过use_invisible_indexs开关统一修改;
查看索引的Region分布,来查看索引是否均匀地分布在Region中,从而查看是否有热点;
SHOW TABLE student2 INDEX idx_name REGIONS;