SQL开发规范和基础(一)

秩序是自由的第一条件。–黑格尔
开发规范:
数据安全规范、应用安全规范、存储过程规范、分表规范、应用规范、配置规范、建表规范、命名规范、索引规范

配置规范:
(1)MySQL数据库默认使用InnoDB存储引擎
(2)保证字符集设置统一,MySQL数据库相关系统、数据库、表的字符集都是用UTF8。表情类的数据需要使用UTF8MB4进行存储。
(3)默认的事务隔离级别是RR(Repeatable -Read),建议初始化时统一设置为RC(Read-Committed),对于OLTP业务更适合。
(4)建议单个表记录数控制在2000w以内
(5)数据库一般不超过50个,每个库下的表数量不超过500个(包括分区表)

建表规范
(1)InnoDB禁止使用外键约束,可以通过程序层面保证。
(2)存储精确浮点数必须用DECIMAL替代FLOAT和DOUBLE
(3)整型定义中无需定义显示宽度,比如:使用INT,而不是INT(4)
(4)不建议使用ENUM类型,可以使用TINYINT代替
(5)尽可能不使用TEXT、BLOB类型,如果必须使用,建议将过大字段或不常用的描述型较大字段拆分到其他表中;另外,禁止用数据库存储图片或文件
(6)存储年时使用YEAR(4),不使用YEAR(2)
(7)建议字段定义为NOT NULL
(8)建议DBA提供SQL审核工具,建表规范性需要通过审核工具审核后

命名规范
(1)库、表、字段全部采用小写
(2)库名、表名、字段名、索引名称均使用小写字母,并以_分隔
(3)库名、表名、字段名建议不超过12个字符。
(4)库名、表名、字段名做到见名知意,不需要添加注释。

索引规范
(1)索引建议命名规范:idx_col1_col2[_colN]、uniq_col1_col2[_colN](如果字段较长,建议采用缩写)
(2)索引中的字段数建议不超过5个
(3)单张表的索引个数控制在5个以内
(4)InnoDB表一般都建议有主键列,尤其是高可用集群方案中是作为必须项的。
(5)建立复合索引时,优先将选择性高的字段放在前面
(6)UPDATE、DELETE语句需要根据WHERE条件添加索引
(7)不建议使用%前缀模糊查询,因为会导致全表扫描
(8)合理利用覆盖索引,如:SELECT email,uid FROM user_email WHERE uid=xx,如果uid不是主键,可以创建覆盖索引idx_uid_email(uid,email)来提高查询效率
(9)避免在索引字段上使用函数,否则会导致查询时索引失效
(10)确认索引是否需要变更时要联系DBA。

应用规范
(1)避免使用存储过程、触发器、自定义函数等,容易将业务逻辑和DB耦合在一起,后期做分布式方案时会成为瓶颈
(2)考虑使用UNION ALL,减少适用UNION,因为UNION ALL不去重,而少了排序操作,速度相对比UNION要快,如果没有去重的需求,优先使用UNION ALL
(3)考虑使用limit N,少用limit M N,特别是大表或M比较大的时候。
(4)较少或避免排序,如:group by中如果不需要排序,可以增加order by null
(5)统计表中记录数时使用count( * ) 操作,而不是count(primary_key)或count(1);InnoDB表避免使用count (*)操作,计数统计实时要求较强可以使用memcache或者redis;非实时统计可以使用单独统计表,定时更新。
(6)做字段变更操作(modify column/change column)的时候必须加上原有的注释属性,否则修改后,注释会丢失;
(7)使用prepared statement可以提高性能并且避免SQL注入
(8)SQL语句中IN包含的值不应过多
(9)UPDATE、DELETE语句一定要有明确的WHERE条件
(10)WHERE条件中的字段值需要符合该字段的数据类型,避免MySQL进行隐式类型转化
(11)SELECT、INSERT语句必须显式的指明字段名称,禁止使用SELECT *或者INSERT INTO table_name values()。就是要写明查询、插入哪些字段
(12)INSERT语句批量提交时,个数不应过多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值