如果要修改或删除数据,在执行SQL前一定要先备份要修改的数据,万一误操作,还能吃口**「后悔药」**~
10、where后面的字段,留意其数据类型的隐式转换(SQL性能优化)
「反例:」
//userid 是varchar字符串类型
select * from user where userid =123;
「正例:」
select * from user where userid =‘123’;
「理由:」
因为不加单引号时,是字符串跟数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较,最后导致索引失效
11、尽量把所有列定义为NOT NULL(SQL规范优雅)
-
「NOT NULL列更节省空间」,NULL列需要一个额外字节作为判断是否为 NULL 的标志位。
-
「NULL列需要注意空指针问题」,NULL列在计算和比较的时候,需要注意空指针问题。
12、修改或者删除SQL,先写WHERE查一下,确认后再补充 delete 或 update(SQL后悔药)
尤其在操作生产的数据时,遇到修改或者删除的SQL,先加个where查询一下,确认OK之后,再执行update或者delete操作
13、减少不必要的字段返回,如使用select <具体字段> 代替 select * (SQL性能优化)
「反例:」
select * from employee;
「正例:」
select id,name from employee;
理由:
-
节省资源、减少网络开销。
-
可能用到覆盖索引,减少回表,提高查询效率。
14、所有表必须使用Innodb存储引擎(SQL规范优雅)
Innodb 「支持事务,支持行级锁,更好的恢复性」,高并发下性能更好,所以呢,没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎
15、数据库和表的字符集尽量统一使用UTF8(SQL规范优雅)
尽量统一使用UTF8编码
-
可以避免乱码问题
-
可以避免,不同字符集比较转换,导致的索引失效问题
「如果需要存储表情,那么选择utf8mb4来进行存储,注意它与utf-8编码的区别。」
begin;
update account set balance =1000000
where name =‘捡田螺的小男孩’;
commit;
16、尽量使用varchar代替 char。(SQL性能优化)
「反例:」
deptName
char(100) DEFAULT NULL COMMENT ‘部门名称’
「正例:」
deptName
varchar(100) DEFAULT NULL COMMENT ‘部门名称’
理由:
- 因为首先变长字段存储空间小,可以节省存储空间。
17、如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。(SQL规范优雅)
这个点,是阿里开发手册中,Mysql的规约。你的字段,尤其是表示枚举状态时,如果含义被修改了,或者状态追加时,为了后面更好维护,需要即时更新字段的注释。
18、SQL命令行修改数据,养成begin + commit 事务的习惯(SQL后悔药)
「反例:」
update account set balance =1000000
where name =‘捡田螺的小男孩’;
「正例:」
begin;
update account set balance =1000000
where name =‘捡田螺的小男孩’;
commit;
19、索引命名要规范,主键索引名为 pk_ 字段名;唯一索引名为 uk _字段名 ;普通索引名则为 idx _字段名。(SQL规范优雅)
说明:pk_即primary key;uk_即unique key;idx_即index 的简称。
20、WHERE从句中不对列进行函数转换和表达式计算
假设loginTime加了索引
「反例:」
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
1200页Java架构面试专题及答案
小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞
百度、字节、美团等大厂常见面试题
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算