数据库sql的基本优化守则,注意事项

三大范式

  1. 字段都是不可拆分的原子值(要求数据库获取的数据是可以直接使用的数据)
  2. 必须完全依赖主键(不允许联合主键)
  3. 除主键列的其他列之间不能有传递依赖

事务的四大特征

  1. 原子性:事务是最小的执行单位,不可在分割
  2. 一致性:sql 语境必须保证同时成功或失败
  3. 隔离性:事务1和事务2之间是具有隔离的
  4. 持久性:事务结束,就不可回退

隔离性即产生的问题

  • 读未提交(read uncommitted):一个事务还没有提交时,它做的变更就能被别的事务看到。
    • 产生问题:如个事务1执行失败,那么事务2可能在执行过程中用到了事务1执行过程中改变的一些数据。导致事务1虽然执行失败,但是事务1产生的数据被执行成功的事务2用到,形成脏数据。
  • 读提交(read committed):一个事物提交之后,它做的变更才会被其他事务看到。
    • 产生问题:事务1在执行过程中,事务2修改数据并提交了事务1用到的其中一个数据,导致事务2最终的对数据的计算修改,是事务2改变后的数据。
  • 可重复读(repeatable read):一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。
    • 产生问题:两个事务同时修改一张表,那么在事务结束前无法查看到另一事务对表的修改。在插入数据的时候,唯一约束可能会产生错误。
  • 串行化(serializable):对于同一行记录,写会加“写锁”,读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,才能继续执行。

SQL语句优化注意事项

  1. 避免使用in、not in,、可以使用 between
select id from table where num in(1,2,3)
select id from table where num between 1 and 3
  1. 子查询尽量使用 exists
select num from table where num 
exists(select * from table where b.num = a.num)
  1. 避免使用or 使用union
select id from a where num = 10 
union all 
select id from a where num=20
  1. 避免null 值判断 给字段添加默认值0
select * from table t where d = '0';
  1. 避免在where条件中等号的左侧进行函数操作,将函数操作移动到右侧
select * from table t where d = t.a+t.c ;
  1. 使用JOIN时,应该用小结果集驱动大结果集。
 select * from a join b on a.id = b.id
        left join c on c.time = a.date
        left join d on c.pid = b.aid
        left join e on e.cid = a.did
  1. 避免左模糊查询,使用右模糊
select id from a where name like 'abc%';

优先博主推荐

https://www.cnblogs.com/pepcod/archive/2013/01/01/2913496.html

小米SQL优化工具学习

https://baijiahao.baidu.com/s?id=1669361873159516799&wfr=spider&for=pc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值