MySQL开发规范与要求

1 表必须有主键

主键与业务无关,不要更新。

2 单表数据量不要超过千万行

2-1

单表数据太大,在数据库增加字段时候,

先建立一个新表,然后复制数据到新表,
再删除老表,重命名新表
数据量越大,越慢。

2-2

  • 表越大,关联查询越慢
  • 创建表的时候保留几个字段,比如bigint,varchar,预留2-3个
  • 单表数据过大超过千万,可以考虑分库分表

3 禁止在系统的生产环境,执行DDL,包括加索引

  • 1 可能会遇到data meta lock等问题
  • 2 会锁表,影响业务,可能超时。

4 不要在数据库用存储过程,函数,触发器

数据库仅仅用例记录,不要参与复杂计算
建议将计算逻辑放到Java代码中

5 生产下,禁止大事务

比如,update更新全表,如果记录超过10万行,需要分批执行。

6 慎用子查询

  • 尽量使用join关联表,避免子查询,子查询影响性能。

7 字段能用整型,一定不要varchar

  • 整型的性能会好很多

8 不允许在表中大字段

比如:text,lob,blob,
如果存储的是文件,图片,仅仅保留地址

9 三范式

可以适当冗余

10 多表事务

同一事务多表更新,需要按照表的更新顺序更新,避免死锁

11 使用count(*)

使用count(*) 统计所有行,包括空行
使用count(列名),空行不会被统计到。

12 count(distinct(列名))

计算该列除空行之外,不重复的行数

13 count(distinct(列名1,列名2))

如果其中某一列都是空,另外一列有不同的值,返回也是0

14 使用sum注意 npe问题

当某一列全是空的时候,count(列名)会返回0,但是sum(列名)会返回NULL,需要特别注意。
如何解决呢?

select if(isnull(sum(列名),0,sum(列名))) from table

15 使用isnull()来判断空值

因为null与任何东西的比较都是null

16 不得使用外键和级联

通过在应用层的事务来解决

17 in 操作尽量避免

如果无法避免,控制后面个数在1000个以内

18 禁止使用select *

可能导致查询所有字段了,浪费资源。

posted @ 2021-12-27 19:13  姚狗蛋  阅读(25)  评论(0编辑  收藏  举报