SQL优化

为什么要做SQL优化

因为1.系统的吞吐量和瓶颈往往体现在数据库的访问速度上

2.随着系统的运营时间日积月累,数据往往与日俱增,处理的速度会越来越慢,所以需要一个优秀的数据库设计保证在大数据上系统还能保持快速的处理速度

3.数据是存储再硬盘上没有再内存里面的数据读写速度

SQL优化分为3个部分

一.根据业务的设计层面,包括但不限于表设计,字段设计

原则:

1.尽量使用字符串类型varchar(非定长)而不是char(定长,不足位补0)

2.单表字段不宜过多

3.遇到复杂业务可以使用外键

4.多使用枚举类型字段 (0-是 1- 否)

5.使用默认值是避免null数据(sql在处理null字段数据上比not null的数据复杂很多)

二.硬件层面,包括数据库选型,存储引擎(innodb),索引建立,分表分库,集群部署,读写分离等等

1.索引的数据类型是B+树

2.存储引擎主要分为(innodb,MyiSAM,MEMORY)但是主流都是使用innodb

三.通常的sql书写规范等等

基础的sql优化

1.尽量不要使用select * ,要什么字段查询什么字段节约资源

2.尽量避免再where条件中使用or的查询条件

使用or的查询条件可能导致mysql的优化器试别出来然后不走索引走全表是扫描

正确的是使用union all 链接两条sql

错误示范

SELECT * FROM student WHERE id=1 OR salary=30000

正确示范

SELECT * FROM student WHERE id=1
UNION ALL
SELECT * FROM student WHERE salary=30000

3.where查询条件避免字符串类型转换   id = '1111'

4.where 查询条件避免使用运算符 != ,<>

5.where查询条件避免函数表达式,数学公式等

6.gruop by数据先过滤后分组,减少数据提高分组效率

6.复合索引最左原则,书写sql的时候注意 

MYSQL的事务隔离级别

读非提交

读已提交

可重复读

可串行读

MySQL默认是可重复读事务隔离级别

数据库锁

表锁:每次操作锁住整张表开销小速度块,不会出现死锁,锁定力度大出现锁冲出概率小

行锁:每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高

MVCC

多版本并发控制,是在多个事务发生的时候保证每个事务不相互影响的机制,

两个核心模块,undo日志版本链:在一行数据被多个事务依次修改过后,每次的修改记录都会保存到undo日志版本链中,用于回滚操作

一致性视图read-view:每一个事务开启后,执行任何查询sql时就会生成当前事务的一致性视图。这个视图是由查询的时候所有未提交的事务id数组和已创建的最大事务id组成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值