Mysql高性能优化第六章 查询优化

背景:

查询优化基础:

查询的生命周期大致可以按照顺序如下来看:从客户端、服务器、然后在服务器上解析,生成执行计划,执行,并将返回结果给客户端。其中执行是生命周期中最重要的阶段。

Mysql查看慢查询的指标:

响应时间:服务时间和排队时间,服务时间是指数据库处理这个查询花了多少时间,排队时间是指服务器因为等待某些资源而没有真正执行查询的时间,可能是I/O时间,也可能是等待行锁等待。

扫描的行数:理想情况下扫描的行数和返回的行数是相同的,但是实际上扫描的行数与返回的行数的比率非常小,在1:1到10:1之间。

返回的行数:

大查询变成小查询:

切分查询:将一个Delete语句分成多个小的执行语句:

分解关联查询:

很多高性能的应用都会使用关联查询进行分解:可以对每个表进行单表查询,然后将结果在应用程序中进行关联。

例子:select * from tage join tage_post on tag_post.tag_id = tag.id 

join post on tag_post.post_id = post.id where tag.tag='mysql';

可以改变成:

select * from tag where tag = 'mysql';

select * from tag_post where tag_id = 1234;

select * from post where post.id in (123,456,567,9999);

优势:让缓存的效率更高,将查询分解后,执行单个查询可以减少锁的竞争,在应用层做关联,可以更容易的对数据库进行拆分,更容易做到高性能和可扩展。

使用In()代替关联查询可以让mysql安装ID顺序进行查询,这比随机关联要高效。

Mysql执行的基础

1.客户端先发送一条查询给服务器

2.服务器先检查缓存,如果命中了缓存,则立刻返回缓存的结果,否则进入下一阶段

3.服务器进行sql解析,预处理,再由优化器生成对应的执行计划

4.mysql根据执行计划,调用存储引擎的api来执行查询

5.将结果返回客户端

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值