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)年

你可能感兴趣的:(mysql建表规范)