TIDB数据库使用天条

原文链接: https://my.oschina.net/29232258/blog/1831484

2018年初做项目时客户采用了新一代分布式NewSQL数据库—TIDB,此文档也仅仅是在实际应用开发时对TIDB数据库SQL做的一些总结经验。如果你对TIDB数据库的源码或者其他一些实现感兴趣,可以直接访问https://www.pingcap.com/,此文档对你一点参考意义都不存在。

近年来,随着数据量的高速增长,传统的数据也从集中走向分布式,对数据进行了分片,由此也诞生了众多优秀的分布式数据库中间件(Mycat、sharding-jdbc),使得业务数据做到了分布式。

然而TIDB从根本上解决了并实现了分布式数据库,高度兼容MySQL,不需要任何中间件,也无需改变业务开发人员已有的习惯和程序。如果你仅仅关注的是你的业务实现,也不要认为TIDB很神秘,你就把他当做一个单机版的MySQL数据库使用就行了,几乎无需修改代码。

不支持的天条

  1. 存储过程(如果即使支持,也不要使用存储过程,难于移植和扩展)
  2. 视图
  3. 触发器
  4. 自定义函数
  5. 外键约束
  6. 全文索引
  7. 空间索引
  8. 非UTF-8字符集

差异性天条

  1. 表上必须要有唯一索引或者主键
  2. 自增列(auto_increment)只确保唯一,没有顺序性概念;所以在insert的时候不要设置自增列的值
  3. 事务隔离级别采用的是可重复读(TIDB与MySQL和Oracle的可重复读是有区别的,TIDB的可重复读隔离机制个人觉得类似于串行化)
  4. Select …for update 不会给数据枷锁,只是在更新本事务提交时报错而已
  5. 事务大小限制
    1. 单条 KV entry 不超过 6MB
    2. KV entry 的总条数不超过 30w(官网建议值10000,但是要具体到表上的索引,根据索引数量好像是2倍关系的递减)
    3. KV entry 的总大小不超过 100MB
  6. DML语句
    1. 基本MySQL语句都支持,开发中只碰到格式化后的select count(1)报错
  7. DDL语句
    1. Add/Drop primary key 操作目前不支持。
    2. Add Index/Column 操作不支持同时创建多个索引或列。
    3. Drop Column 操作不支持删除的列为主键列或索引列。
    4. Add Column 操作不支持同时将新添加的列设为主键或唯一索引,也不支持将此列设成 auto_increment 属性。
    5. Change/Modify Column 操作目前支持部分语法,细节如下:

在修改类型方面,只支持整数类型之间修改,字符串类型之间修改和 Blob 类型之间的修改,且只能使原类型长度变长。此外,不能改变列的 unsigned/charset/collate 属性。这里的类型分类如下:

具体支持的整型类型有:TinyInt,SmallInt,MediumInt,Int,BigInt。

具体支持的字符串类型有:Char,Varchar,Text,TinyText,MediumText,LongText。

具体支持的 Blob 类型有:Blob,TinyBlob,MediumBlob,LongBlob。

在修改类型定义方面,支持的包括 default value,comment,null,not null 和 OnUpdate,但是不支持从 null 到 not null 的修改。

个人建议

  1. 索引
    1. 业务字段即使多个字段组合构成唯一索引时,必须建成唯一索引
    2. 减少join的使用,尽量在业务层面实现join,如果非要使用关联字段要求要索引
    3. 组合索引,数据区分度高的字段在最前面
  2. 语句
    1. 禁止使用存储过程
    2. 不要使用count(列),尽量使用count(1)
    3. Sum函数注意null
    4. 不得使用级联操作(TIDB也不支持)
    5. 不建议使用truncate
    6. 分批删除使用limit

转载于:https://my.oschina.net/29232258/blog/1831484

你可能感兴趣的:(TIDB数据库使用天条)