提升查询速度的方式

where查询太慢
覆盖索引通过取消回表操作,提升查询效率
有更合适的索引不走怎么办?
mysql在选取索引时,会估算索引有多少种
通过选取几个页取平均值,再乘以页的数量来估算
这个估算值叫cardinality

cardinality越大,区分度越大,越好
如果估计错了,我们可以强制使用别别的索引force index
也可以重新优化估计
analye table

count慢怎么办?
用来统计不为null的数据个数
过程
在这里插入图片描述
count(非索引字段)
首先要扫面全表,拿出来,再解析出没有null的数据,效率很低
count(索引字段)
在这里插入图片描述
count(主键)也其实得判断null,没优化

count(1)
在这里插入图片描述

count(*)
在这里插入图片描述
order by慢怎么办
原理
在这里插入图片描述

中间结果集
中间结果集比较小,可以直接在内存中排序
在这里插入图片描述
回表生成完整结果集
在这里插入图片描述
中间表是一个临时表,不能走索引
最高效–索引覆盖
where条件和order条件走的一个条件
在这里插入图片描述
筛选字段,where字段,order字段都被索引覆盖,这样最好

随机选取慢怎么办
order by rand()原理:随机输出
select title ,description from film order by rand() limit 1;
随机的输出一个
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么慢
sql执行过程中出现两次中间结果,都是全长度的
仅需要一个随机结果,却经历了不必要的排序
调用了很多次rand()
在这里插入图片描述
在这里插入图片描述
大头大哥丢了怎么办
索引下推
using index condition
是自动开启的
在这里插入图片描述
松散索引扫描
usingindex for skip scan
在这里插入图片描述

明明有索引,就是不走怎么办

在这里插入图片描述
在这里插入图片描述
字符串与数字比较
在这里插入图片描述
隐式字符编码转换
在这里插入图片描述
分页查询慢怎么办
偏移量大时,效率低

在这里插入图片描述
优化思路
想想办法走索引覆盖
得到所需数据的id
根据所需数据的id,得到最终的结果集
在这里插入图片描述

慢查询的怀疑方向
1 索引设计有问题
覆盖索引:语句从执行到返回均使用同一个索引,避免回表。通过优化sql语句
2 sql语句有问题
3 数据库选错索引

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值