TiDB学习笔记(三)-Schema设计

一、库表结构设计

TiDB不支持的数据对象:Function、Procedure、Trigger

Schema的KV映射原理:数据在RocksDB中以KV方式存储

表编号+主键 作为key,其他列 作为value

非聚簇表: key:TableID_RowID Value:所有列组成

聚簇表: key:TableID_Col1          Value:Col1之外的列组成

特点:

  • 表中的行数据存储顺序与主键存储的顺序一致
  • 主键是KV映射中key的一部分
  • 通过主键访问行记录时,可直接获取行记录

clustered nonclustered

建表后只支持添加、删除非聚簇索引,不支持添加或删除聚簇索引

聚簇索引表和索引组织表类似

为避免写入热点,创建非聚簇表添加参数SHARD_ROW_ID_BITS、PRE_SPLIT_REGIONS

分区表

类型:range、list、list columns、hash

分区表的每个唯一键或主键,必须包含分区表达式中用到的所有列

自增列

持续大量插入数据,会导致数据写入到同一个region,导致单个节点压力过大。解决办法:建表时主键上加auto_random,必须为bigint类型,auto_random应用在聚簇表中,不支持alter table修改auto_random属性。

实现原理:每个TiDB节点会缓存一个不重复的ID段

单行大小限制为6MB

设计建议

高兼容

  • 适用从原来MySQL业务迁移到TiDB数据库
  • 创建表时创建非聚簇表nonclustered
  • 其他列保持原有设计
  • 为表添加shard_row_id_bits和pre_split_regions

高性能

  • 新建表使用聚簇表
  • 准确选择数据类型
  • 避免创建无效索引
  • 主键用随机性强的列,设置auto_random

二、索引设计

唯一索引,非聚簇表的主键

key:tableid_indexid_indexcolvalue

value:rowid

二级索引(非唯一索引)

key:tableid_indexid_indexcolvalue_rowid

value:null

表达式索引:lower,md5,reverse,upper,vitess_hash

不可见索引 invisible(不会被查询优化器使用,使用hint语法也无法强制使用不可见索引),修改为可见visible。主键无法设置为不可见索引

查看索引分布 show table t1 index idx_t1 regions

三、系统表使用

mysql.user, information_schema, metrics_schema(tidb监控),performance_schema

mysql库user、db、tables_priv、columns_priv

mysql.tidb    修改相关参数

information_schema.cluster_info

information_schema.cluster_config

information_schema.ddl_jobs

information_schema.slow_query   可根据digest查出此类慢SQL

information_schema.tidb_hot_regions 查询读写热点

data_lock_waits 正在发生的悲观锁 

deadlocks 默认可查询最近10次的死锁

tidb_trx  正在执行的事务信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值