MySQL规范

1. 统一的规范

首先,我们来一些通用的规范。这里有很多是经验值,如果你的数据库所在的宿主机硬件,并不是十分的牛X,可以考虑再降低一下标准。

存储引擎: 请统一使用innodb存储引擎(一般我们都使用innodb,当然也可以考虑其他的存储引擎)

字符集:统一使用utf8字符集。这个要从应用程序、服务器、数据库的表、字段等全部统一起来。注意:MySQL中的utf8mb4字符集,才是真正的utf8,请用这个。

作用范围:不要在MySQL存储大对象,比如图片、音乐等;不要用MySQL做Gis运算、全文检索;不使用存储过程、触发器、函数、外键,避免破坏数据库的性能和扩展性。

使用上限:(这个是重点)
每个MySQL实例,数据库不要超过50个;
单数据库容量,不要超过500GB,否则分库;
单表记录数量,不要超过5000W,否则分表;
单表子段数量,不要超过30个,否则拆表;
单张表中索引数量不超过5个,单个索引中的字段数不超过5个;

2. 索引规范

(1)索引是数据库中非常重要的结构,可以加速数据的检索。但索引是要占用大量空间的,如果你的数据表里面没几条记录,就不必创建索引。比如2000条以下。
在这里插入图片描述

(2)选择性很小的字段(低基数列),不要加索引。比如一些state,type,布尔判断等。因为加了也没用。

(3)尽量让索引的内容尽量的短!比较长的子段,要使用前缀索引。比如:title varchar (64) ,可以创建前缀索引 idx_title (title(16))。

(4)合理利用索引的最左原则,合并相似的索引。比如 (a) (ab) (abc)三种索引需求,我们只需要创建abc这一个索引就ok了。

(5)不能使用%前缀模糊查询,因为无法使用索引,例如:WHERE name LIKE ‘%味道’。

(6)不能使用数据库端做全文检索操作。虽然它支持,也不要这么做。

3. SQL规范

(1)大多数字段应该定义成not null的,并分配默认值,但是不要default null,因为数据库无法索引null值。
created_time:记录创建时间,时间类型
update_time:记录修改时间,时间类型
(2)复杂的SQL查询语句,是绝对要避免的。我们所说的,就是慢查询。慢查询会占用大量资源,并阻塞线程,应该见谅将大SQL拆分成多条简单的SQL,减少数据的锁定时间。

(3)另外,不要在不同数据类型的字段上进行比较,避免字段类型转换造成性能损失,这就要求我们在SQL语句中传入的参数类型,和数据库中所定义的类型是相同的。

在这里插入图片描述
(1)禁止使用select *进行输出,应该选择具体的字段进行输出。除了避免无用的字段造成传输上的性能损耗,还能在一定程度上避免敏感信息的泄漏。

(2)注意OR语句的一些改善情况, 比如WHERE id=1 OR id=2可以 改写为WHERE id IN(1,2)

(2)对于删除的语句,防止误删除, 后面最好加 limit的限制

4. 命名规范

(1)数据库表和字段的命名,不要使用驼峰命名方式。比如,不能叫testData,而应该叫做test_data。因为大多数数据库,都不区分大小写,下划线命名会更安全。

(2)这些命名,只能使用英文小写字母、数字和下划线,长度不超过17个字符。

(3)命名应该有确切的含义。和代码规范一样,不允许使用a,b等无意义的字符串。不允许中文拼音缩写、中英文混用等。

5. 安全

(1) 服务器隔离 如果你的公司有多个环境,比如dev环境,测试环境等,就要做好相应的隔离。比如,不允许在线上环境直接进行开发和测试、禁止在线上做数据库压⼒力测试。这是非常重要的,避免了无谓的数据错乱。如果条件允许,甚至可以做物理隔离,用不同的IP段进行区分。不长脑子的程序员有很多,你永远不知道他们连的是哪个环境的数据库。

(2)账户的权限 永远不要在生产上,让root账号远程可连。对不同的应用,应该分配不同的database,并建立相互隔离的账号。

(3)账号默认开启select/insert/update/delete/execute的权限就可以。create都不能放开,用根本上杜绝程序员们删库跑路的机会(我们都是有职业操守的哦)。

(4)针对安全级别高的应用,应分配读写账号。读账号去掉各种更新权限,只能做一些sql查询。账号命名方式上,可以加入_w或者_r后缀,表明它们的意图。

(5)对于SQL的传入参数(数字,字符和混用)必须进行合法性检查,防止SQL注入。业务应该提前准备好风险SQL语句,进行集中审核,负责后果自负。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值