加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql使用详细规范,避免埋坑

发布时间:2022-09-24 14:54:06 所属栏目:MySql教程 来源:
导读:  建表规范

  (1) InnoDB禁止使用外键约束,可以通过程序层面保证

  (2)存储精确浮点数必须使用 DECIMAL替代 FLOAT和 DOUBLE

  (3)整型定义中无需定义显示宽度,比如:使用1NT,而不是INT(4)
  建表规范
 
  (1) InnoDB禁止使用外键约束,可以通过程序层面保证
 
  (2)存储精确浮点数必须使用 DECIMAL替代 FLOAT和 DOUBLE
 
  (3)整型定义中无需定义显示宽度,比如:使用1NT,而不是INT(4)
 
  (4)不建议使用ENUM类型,可使用 TINYINT来代替。
 
  (5)尽可能不使用TEXT、BLOB类型,如果必须使用,建议将过大字段或是不常用
 
  的描述型较大字段拆分到其他表中:另外,禁止用数据库存储图片或文件
 
  (6)存储年时使用YEAR(4),不使用YEAR(2)
 
  (7)建议字段定义为 NOT NULL
 
  8)建议DBA提供SOL审核工具,建表规范性需要通过审核工具审核后
 
  命名规范
 
  (1)库、表、字段全部采用小写
 
  (2)库名、表名、字段名、索引名称均使用小写字母,并以“”分隔
 
  (3)库名、表名、字段名建议不超过12个字符。(库名、表名、字段名支持最多64
 
  个字符,但为了统一规范、易于辨识以及减少传输量,统一不超过12字符)
 
  (4)库名、表名、字段名见名知意,不需要添加注释
 
  索引规范
 
  (1)索引建议命名规则:idx _coll_ col2[- CoIN], uniq_ coll_col2[ _colN](如果字段过长建议 采用缩写)
 
  2)索引中的字段数建议不超过5个。
 
  (4)lmDB表一般都建议有主键列,尤其在高可用集群方案中是作为必须项的
 
  (3)单张表的索引个数控制在5个以内
 
  (5)建立复合索引时,优先将选择性高的字段放在前面
 
  (6) UPDATE、 DELETE语句需要根据 WHERE条件添加索引
 
  (7)不建议使用%前缀模糊查询,例如LKE“% weibo”,无法用到索引,会导致全
 
  表扫描。
 
  (8)合理利用覆盖索引,例如:
 
  SELECT email, uid FROM user email WHERE uid=x,如果uid不是主键mysql使用,可以创建
 
  覆盖索引 idx uid email(uid, email)来提高查询效率
 
  (9)避免在索引字段上使用函数,否则会导致查询时索引失效
 
  (10)确认索引是否需要变更时要联系DBA
 
  应用规范
 
  (1)避免使用存储过程、触发器、自定义函数等,容易将业务逻辑和DB耦合在一起,
 
  后期做分布式方案时会成为瓶颈
 
  (2)考虑使用 UNION ALL,减少使用UNON,因为 UNION ALL不去重,而少了排
 
  序操作,速度相对比UNON要快,如果没有去重的需求,优先使用 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进行隐
 
  类型转化
 
  (1) SELECT、 INSERT语句必须显式的指明字段名称,禁止使用 SELECT·或是
 
  INSERT INTO table name values(
 
  (12) INSERT语句使用bach提交( NSERT INTO table name VALUESO。 0, 0……)
 
  values的个数应过多
 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!