火狐体育官方版

加强技术投入,共享技术成果

火狐体育官方版:MySql数据库开发规范 - SegmentFault 思否


更新日期:2022-08-14 16:17:39 来源:火狐体育官网app下载ios 作者:火狐体育娱乐app下载

  根据之前写的文章内容,结合网上找到的资料,整理出下面的MySql数据库规范作为参考。

  所有的数据库对象名称(包括库名、表名、列名等等)必须以小写字母命名,每个单词之间用下划线分割

  所有表如果没有特殊需求,都要使用Innodb存储引擎。Innodb存储引擎支持事务、行级锁、更好的恢复性、高并发下性能更好。

  数据库和表的字符集统一使用UTF8字符集,避免由于字符集的转换产生乱码。

  所有的表和字段都需要添加注释。使用comment从句添加表和列的备注,从一开始就把数据字典维护好

  列的字段类型越大,建立索引占据的空间就越大,导致一个页中的索引越少,造成IO次数增加,影响性能。

  使用datetime、timestamp存储时间类型,禁止使用字符串替代

  使用数字类型存储IP地址,用INET_ATON、INET_NTOA可以在IP地址和数字类型间转换。

  索引并不是越多越好。索引可以提高查询的效率,但会降低写数据的效率。有时不好的索引还会降低查询的效率。

  禁止给表中的每一列都建立单独的索引。设计良好的联合索引比每一列上的单独索引效率要高出很多。

  每个Innodb表都必须有一个主键,且不使用更新频繁的列作为主键,不使用多列主键。不使用UUID、MD5、字符串列作为主键。最好选择值的顺序是连续增长的列作为主键,所以建议选择使用自增ID列作为主键

  重复的和冗余的索引会降低查询效率,因为MySQL查询优化器会不知道该使用哪个索引。

  不要依靠外键保证参照完整性,在业务端实现参照完整性的要求。建立外键约束后的表在插入数据时要进行数据参照完整性检查,这会导致消耗数据库性能。虽然不使用MySql自带的外键,但一定在表与表之间的关联键上建立索引。

  在程序中,建议使用预编译语句进行数据库操作。预编译只编译一次,多次使用,比SQL效率高。

  避免使用子查询,子查询会产生临时表,临时表没有任何索引,数据量大时严重影响效率。建议把子查询转化成关联查询。