数据库准入规则
建表要点
为什么推荐使用表使用INNODB,而不是MYISAM或其它?
InnoDB在并发读写性况下好于MyISAM、支持事务、表不易损坏。
InnoDB中为什么推荐主键使用自增
递增与InnoDB本身数据的存储原理相契合,有利于数据的顺序存储及读取,更好的避免插入过程中的数据分页.
为什么不让使用存储过程、触发器、外键、视图、事件等
原因在于与业务耦合太大,或是某些场景下可能造成主从不一致,或是不利于线上追查问题,或是不利于统一运维等
字段及表必须要有COMMENT
主要出于这样做更有利于对共同开发或接手开发的其它同学。建立表及字段的COMMENT是一个天然的功能说明书。
字段设置为非NULL
更有利于语句查询,规避一些容易出现的问题,InnoDB本身对NULL的处理有别于其它正常数据或空数据
字段禁用ENUM,SET
原因在于不利于扩展,扩展变更表会导致表阻塞写
VARCHAR长度的选择
以UTF8不超过2600字符,GBK不超过4000字符为最佳,在业务中推荐不超过7000字符长度,这与varchar在数据页上的存储相关。
不推荐使用BLOB,TEXT等大字段
主要原因在于大字段带来更多的IO,网络开销。同时会给中间层带有影响。RD可与PM沟通是否真有必要,然后与DBA进行确认。
SQL使用要点
禁止使用SELECT *取所有字段
带来更多的网络及可能更多的IO消耗,在共同开发中更为明显。如果其它同学放入一个很大的字段,此种SQL将无意中导致带宽问题。
INSERT需要指明需要插入的字段名
表字段变更将直接导致原有正常运行的语句变成错误语句。也易出现因拼写不严禁导致的数据插错字段。
数字与字符之间不做等值查询
如字段是INT类型,结果查询使用ID=’1’这种情况。导致无法利用到索引。
INSERT ON DUPLICATE KEY的使用注意事项
允许使用,但要知道这类语句如何绕过BUG场景
- 在5.0及以下版本中请保证此类语句的串行执行
- 其依赖于表中唯一索引,确保唯一索引不变更。
JOIN表不推荐超过2个
并不是说JOIN3个或以上就一定会出问题,主要原因在于JOIN表越多,性能消耗越大,系统并发能力越低。