mysql规范(自用)

文章目录

sql编写

一些规范

  1. 写完SQL先explain查看执行计划 ,分析是否走索引(索引后面文章会详细讲述);
  2. 操作delete或者update语句,加个limit,加limit优点
    • 降低写错SQL代价:如果误操作的话,可以通过binlog日志快速恢复
    • 提供性能:加了limit 1,如果第一条就命中目标return, 没有limit的话,还会继续执行扫描表。
    • 避免长事物:delete执行时,如果age加了索引,MySQL会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。
    • 数据量大的话,容易把CPU打满
  3. 设计表的时候,所有表和字段都添加相应的注释
CREATE TABLE `account` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `name` varchar(255) DEFAULT NULL COMMENT '账户名',
  `balance` int(11) DEFAULT NULL COMMENT '余额',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1570068 DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='账户表';
  1. INSERT语句标明对应的字段名称
insert into Student(student_id,name,score) values ('666','捡田螺的小男孩','100');
  1. 变更SQL操作先在测试环境执行,写明详细的操作步骤以及回滚方案,并在上生产前review。
  2. 设计数据库表的时候,加上三个字段:主键,createtime,updatetime
CREATE TABLE `account` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `name` varchar(255) DEFAULT NULL COMMENT '账户名',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='账户表';
  1. 写完SQL语句,用explain检查where,order by,group by后面的列,多表关联的列是否已加索引,优先考虑组合索引。
  2. where后面的字段,留意其数据类型的隐式转换
    在这里插入图片描述
    在这里插入图片描述
  3. 尽量把所有列定义为NOT NULL。NOT NULL列更节省空间,而且NULL列需要注意空指针问题。
  4. 修改或者删除SQL,先写WHERE查一下,确认后再补充 delete 或 update。尤其是生产库
  5. 减少不必要的字段返回,如使用select <具体字段> 代替 select *。
  6. 所有表必须使用Innodb存储引擎。
  7. 数据库和表的字符集统一使用UTF8,(如果是存储表情的,可以考虑 utf8mb4)。
  8. 尽量使用varchar。
  9. 索引命名要规范,主键索引名为 pk 字段名;唯一索引名为 uk 字段名 ; 普通索引名则为 idx _字段名。
  10. WHERE从句中不对列进行函数转换和表达式计算(索引失效)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值