TIDB数据库使用天条

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

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

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

不支持的天条

存储过程(如果即使支持,也不要使用存储过程,难于移植和扩展)

视图

触发器

自定义函数

外键约束

全文索引

空间索引

非UTF-8字符集

差异性天条

表上必须要有唯一索引或者主键

自增列(auto_increment)只确保唯一,没有顺序性概念;所以在insert的时候不要设置自增列的值

事务隔离级别采用的是可重复读(TIDB与MySQL和Oracle的可重复读是有区别的,TIDB的可重复读隔离机制个人觉得类似于串行化)

Select …for update 不会给数据枷锁,只是在更新本事务提交时报错而已

事务大小限制

单条 KV entry 不超过 6MB

KV entry 的总条数不超过 30w(官网建议值10000,但是要具体到表上的索引,根据索引数量好像是2倍关系的递减)

KV entry 的总大小不超过 100MB

DML语句

基本MySQL语句都支持,开发中只碰到格式化后的select count(1)报错

DDL语句

Add/Drop primary key 操作目前不支持。

Add Index/Column 操作不支持同时创建多个索引或列。

Drop Column 操作不支持删除的列为主键列或索引列。

Add Column 操作不支持同时将新添加的列设为主键或唯一索引,也不支持将此列设成 auto_increment 属性。

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 的修改。

个人建议

索引

业务字段即使多个字段组合构成唯一索引时,必须建成唯一索引

减少join的使用,尽量在业务层面实现join,如果非要使用关联字段要求要索引

组合索引,数据区分度高的字段在最前面

语句

禁止使用存储过程

不要使用count(列),尽量使用count(1)

Sum函数注意null

不得使用级联操作(TIDB也不支持)

不建议使用truncate

分批删除使用limit

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180617G0T69C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券