mysql建表规范

  1. 存储引擎必须使用InnoDB
    InnoDB 支持事物,行级锁,并发性能更好,CPU以及内存优化更高
  2. 必须设置主键ID,并且使用主键自增,除非是在分库分表的环境下
    由于InnoDB的组织数据的方式决定了需要有一个主键,而且若是这个主键ID是单调递增的可以有效提高插入的性能,避免过多的页分裂,减少表碎片提高空间的使用率。
  3. 使用utf8m64字符集
    mysql中UTF-8并非是“真正的UTF-8”,而“utf8m64”才是真正的“UTF-8”。
  4. 库名,表名字段名均小写,下划线风格,不超过32个字符。
  5. 单表列数必须小于30,若超过则应该考虑将表拆分
    单表列表太多是的Mysql服务器处理InnoDB返回数据之间的映射成本太高。
  6. 禁止使用外键,如果有外键约束,需要应用程序控制
    外键会导致表与表之间耦合,UPDATE与DELETE操作都会涉及相关联的表,十分影响SQL的性能,甚至会造成死锁
  7. 必须把字段定义为NOT NULL并且提供默认值
  • NULL的列使的索引/索引统计/值比较更加复杂,对MySQL来说更难优化
  • NULL这种类型MySQL内部需要特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多
  • NULL值需要更多存储空间,无论是表还是索引每行中的NULL列需要额外的空间来标识
  1. 在一些场景下,考虑使用TIMESTAMP代替DATETIME
  • TIMESTAMP只需要占用4个字节长度,可以存储范围为(1970-2038)年,
  • 而DATETIME类型占用8个字节,对时区不敏感,可以存储的范围为(1001-9999)年
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 表设计 库名、表名、字段名必须使用小写字母,“_”分割。 库名、表名、字段名必须不超过12个字符。 库名、表...
    行动家雷程文阅读 398评论 0 0
  • 一、 表设计库名、表名、字段名必须使用小写字母,“_”分割。库名、表名、字段名必须不超过12个字符。库名、表名、字...
    上街买菜丶迷倒老太阅读 4,068评论 2 7
  • 1、库名、表名、字段名全部使用小写字母,用'_'下划线分割,且名字长度不超过12,做到见名知意。2、建议使用Ino...
    韩金铖阅读 929评论 0 0
  • 合理、适当的规范对于整个团队的开发是有积极作用的,可以减少不恰当的建表语句、错误 SQL、错误的索引等重大意义,故...
    赵客缦胡缨v吴钩霜雪明阅读 451评论 0 7
  • 建表规约 【强制】:①存储引擎必须使用 InnoDB 解读:InnoDB 支持事物、行级锁、并发性能更好,CPU ...
    風崋阅读 275评论 0 0