每一个好习惯都是一笔财富,本文分SQL后悔药、SQL性能优化、SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~
一、SQL后悔药
1、操作delete或者update语句,加个limit
在执行删除或者更新语句,尽量加上limit,以下面的这条 SQL 为例吧:
delete from euser where age > 30 limit 200;
因为加了limit 主要有这些好处:
「降低写错SQL的代价」, 你在命令行执行这个SQL的时候,如果不加limit,执行的时候一个「不小心手抖」,可能数据全删掉了,如果「删错」了呢?加了limit 200,就不一样了。删错也只是丢失200条数据,可以通过binlog日志快速恢复的。
「SQL效率很可能更高」,你在SQL行中,加了limit 1,如果第一条就命中目标return, 没有limit的话,还会继续执行扫描表。
「避免了长事务」,delete执行时,如果age加了索引,MySQL会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。
「数据量大的话,容易把CPU打满」 ,如果你删除数据量很大时,不加 limit限制一下记录数,容易把cpu打满,导致越删越慢的。
2、变更SQL操作先在测试环境执行,写明详细的操作步骤以及回滚方案,并在上生产前review
变更SQL操作先在测试环境测试,避免有语法错误就放到生产上了;
变更Sql操作需要写明详细操作步骤,尤其有依赖关系的时候,如:先修改表结构再补充对应的数据;
变更Sql操作有回滚方案,并在上生产前,review对应变更SQL。
3、修改或删除重要数据前,要先备份,先备份,先备份
如果要修改或删除数据,在执行SQL前一定要先备份要修改的数据,万一误操作,还能吃口「后悔药」~
4、修改或者删除SQL,先写WHERE查一下,确认后再补充 delete 或 update
尤其在操作生产的数据时,遇到修改或者删除的SQL,先加个where查询一下,确认OK之后,再执行update或者delete操作
5、SQL命令行修改数据,养成begin + commit 事务的习惯
1)正例:
begin;
update account set balance =1000000
where nam