规范

基础规范

  1. 表、字段必须要有中文注释,切注意更新注释;

命名规范

  • 库名,表名,列名必须用小写,采用下划线分隔,见名字知意思
  • 库名,表名,列名必须见名知义,带有自述性,长度不要超过32字符
  • t_xxx开头

表设计规范

  • 表必须有主键,推荐使用UNSIGNED整数为主键。无主键,在主从同步时候,会导致备库死掉;
  • 建议将大字段,访问频度低的字段拆分到单独的表中存储,分离冷热数据

列设计规范

  • 使用TINYINT来代替ENUM
  • 必须把字段定义为NOT NULL并设默认值
  • 单表列数必须小于30;
  • 禁止使用text字段,会浪费很多空间,大量字段查询会淘汰掉热数据,导致内存命中率急剧下降,影响数据库性能;
  • 排序规则统一utf8mb4_general_ci 若字段排序规则不一样,会造成连表查询异常;

索引规范

  • 唯一索引使用uniq_[字段名]来命名

  • 禁止更新十分频繁、且区分度不高(例如性别)的属性建立索引。

  • 非唯一索引使用idx_[字段名]来命名

  • 单张表索引数量建议控制在5个以内

  • 非必要不要进行JOIN查询,如果要进行JOIN查询,被JOIN的字段必须类型相同,并建立索引,否则会全表扫描

  • 理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c)

SQL规范

  • 禁止使用select *,只获取必要字段

解读:

(1)select *会增加cpu/io/内存/带宽的消耗

(2)指定字段能有效利用索引覆盖

(3)指定字段查询,在表结构变更时,能保证对应用程序无影响

  • insert必须指定字段,禁止使用insert into T values()

解读:指定字段插入,在表结构变更时,能保证对应用程序无影响

  • 隐式类型转换会使索引失效,导致全表扫描

例如username为varchar。如果select * from user where username=zhangsan,因为没加引号,就会导致全表扫描;

  • 禁止使用or条件,必须用in条件

or 容易不能命中索引,造成全表扫描,

  • 应用程序必须捕获SQL异常,并做相应的处理;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值