mysql中写sql的好习惯
1 写完SQL先explain 查看执行计划
写完SQL,用explain分析一下,尤其注意走不走索引
explain select userid,name,age from user where userid=10086 or age=18;
2操作delete或者update语句,加个limit
delete from euser where age > 30 limit 200;
好处:
降低写错SQL的代价
SQL效率很可能更高
避免了长事务
数据量大的话,容易把CPU打满,系统越来越卡和越删越慢
3设计表的时候,所有表和字段都添加相应的注释
设计数据库表的时候,所有表和字段都加上对应注释,后面更容易维护
create table 'account' (
'id' int(11) not null auto_increment comment '主键',
’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='账户表';
4 SQL书写格式,关键字大小保持一致,使用缩进
SELECT stu.name,sum(stu.score)
FROM Student stu
WHERE stu.classNo='1班'
GROUP BY stu.name;
5 INSERT 插入标明对应字段名称
insert into student (student_id,name,score) values ('666','sky','100');
6 变更SQL操作先在测试环境执行,写明详细的操作步骤以及回滚方案,并在上生产前review
7设计数据库表的时候,加上3个字段:主键,create_time,update_time
create table 'account' (
'id' int(11) not null auto_increment comment '主键',
’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='账户表';
主键一般要加上,没有主键的表是没有灵魂的表
创建时间和更新时间,还是建议加上,详细审计,跟踪记录,都是有用的
8 写完SQL,检查where,order by, groug by 后面的列,多表关联的列是否已加索引,优先考虑组合索引
添加索引:
alter table user add index idx_address_age 9(address,age)
explain select * from user where address='深圳' order by age;
9修改或删除重要数据前,要先备份,先备份,先备份
10 where后面的11字段,留意其数据类型的隐式转换
反例:
select * from user where userid = 123;
正例:
select * from user where userid = '123';
因为不加单引号,是字符串跟数字的比较,他们类型不匹配,MYSQL会做隐式类型转换,把他们转换成浮点数再做比较,最后导致索引失效
11 尽量把所有列定义为not null
NOT NULL 列更节省空间,null列需要一个额外字节作为判断是否为null的标志位
null列需要注意空指针问题,NULL列在计算和比较的时候,需要注意空指针问题
12减少不必要的字段返回,如使用select <具体字段>代替select *
13 所有表必须使用Innodb储存引擎
14数据库和表的的字符集尽量统一使用UTF8
可以避免乱码问题
可以避免,不同字符集比较转换,导致的索引失效问题
15 尽量使用varchar代替char
'deptname' varchar(100) DEFAULT NULL COMMENT ’部门名称‘
因为首先变长字段存储空间小,可以节省存储空间
16 SQL命令行修改数据,养成begin + commit 事务的习惯
begin;
update account set balance = 100000 where name = 'sky';
commit;
17索引命名要规范,主键索引名为pk_字段名,唯一索引名为uk_字段名,普通索引名为idx_字段名
说明:
pk即primary key, uk即unique key, idx即index的简称
18 如果修改更新数据过多,考虑批量进行
for each (200次)
{
delete from account limit 500;
}
mysql中写sql的好习惯的更多相关文章
- MYSQL中写SQL语句,取到表中按ID降序排列(最新纪录排在第一行)
'select * from bugdata where id>0 order by id desc'
- 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载
浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...
- MySQL中的SQL的常见优化策略
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...
- MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause
MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause 201 ...
- 【原创】6. 在MYSQL++中实现SQL语法中的NULL
这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措.我的感觉是Null<T, B>类型通常出现在SSQLS和template Query中比较多. 1. 什么是 ...
- Mysql中的sql是如何执行的 --- 极客时间学习笔记
MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层 ...
- Excel VBA中写SQL,这些问题的方法你一定要牢记
小爬之前的文章 [Excel VBA中写SQL,这些问题你一定为此头痛过]中详细讲诉了一些常见的VBA 中使用SQL遇到的问题,这里再补充两个常见的问题场景及对应的解决方案,希望你们看了后能够思路开阔 ...
- 21个写SQL的好习惯,你值得拥有
前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 公众号:捡田螺的小男孩 1. 写完SQL先explain查 ...
- mysql中的sql
变量 用户变量: 在用户变量前加@ 系统变量: 在系统变量前加@@ 运算符 算术运算符有: +(加), -(减), * (乘), / (除) 和% (求模) 五中运算 位运算符有: & (位于 ...
- MySQL中关于SQL注入的相关需要的基础知识
零.绪论: 文章部分整理来源于公司同事,特此鸣谢!!! 一.关于注入点在KEY上的注入: 我们来看一个查询,你的第一个字段是过滤器(filter)第二个字段是查询的关键字,例如查询ip == 1.2. ...
随机推荐
- 如何正确理解IGBT参数
文档下载链接:https://cnblogs-img.oss-cn-hangzhou.aliyuncs.com/docs/正确理解IGBT模块规格书参数.pdf
- 康谋方案 | 高精LiDAR+神经渲染3DGS的完美融合实践
在自动驾驶时代奔涌向前的路上,仿真测试早已不再是可选项,而是验证智能驾驶系统安全性.鲁棒性和泛化能力的刚需,如何提升仿真测试的保真度已成为无法避免的重要话题. 这正是"数字孪生"出 ...
- MySQL查询优化的步骤
本文由 ChatMoney团队出品 MySQL查询优化是提高数据库性能的关键步骤之一.通过优化查询,可以减少数据库的负载,提高查询速度,从而提高整个应用程序的性能. 选择合适的索引 索引是数据库中用于 ...
- Java 常用线程池
快捷创建线程池方式 Java通过Executors提供四种线程池,分别为: 1.newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需求,可以灵活回收空闲线程,若无可回收 ...
- GPT大模型应用
openAI公司凭什么火遍全球: 1是因为openAI训练出了强大的大语言模型.要训练强大的大语言模型,首先要有足够的GPU算力,例如GPT-3模型内部就有上千亿个参数,每一条训练数据输入运算后,都要 ...
- Windows 系统 局域网文件夹共享无法访问的终极解决方法
先介绍 Win10 无法访问其他电脑的解决方法 首先,Win10 能成功访问共享文件夹,必须有安装 SMB1 协议,否则会提示找不到网络名称的提示. 方法很简单,点击 微软小娜 Cortana 输入 ...
- 新能源制造升级核心引擎:五大MES厂商如何破局行业痛点?
在全球"双碳"目标驱动下,中国新能源产业迎来爆发式增长,动力电池.光伏组件.储能设备产能持续扩张.然而,高速发展的背后,工艺变更频繁导致生产计划失效.多系统数据孤岛阻碍全流程追溯. ...
- taro小程序日期选择器
taro-swiper-week taro-swiper-week 是一个基于 taro 的日期选择器控件. 可以用在h5.微信小程序等众多平台! 简体中文 | English 使用 先安装 npm ...
- react发布一个组件库 系列篇(一)
前言 经常使用别人写好的组件库,然后安装引入使用即可.比如: npm install beautiful-table import BeautifulTable from 'beautiful-tab ...
- Windows下python环境安装与管理
Python功能强大,适合多种应用场景.安装合适的python环境是开发的第一步.下面是Windows环境下Python环境的安装与管理实战方法. 一.在线环境安装 如果需要安装的环境可以连接互联网, ...