联合索引与sql执行流程

上周遗留问题

联合索引:多列一起作为索引,比较时遵循最左前缀原理。

索引最左前缀原理:先比第一个列(name),若第一个相同再往后比。必须从第一个开始比,不能跳过索引中的列。

关键:索引按序排序。

下图为例,只有第一个可以走联合索引。

因为从第二个(age)开始,他都没排好序,肯定走不了索引。

week 2

一:一条sql 怎么走?

连接器(服务层)

1.客户端通过链接器链接数据库:输入数据库IP地址,用户名,密码。新建链接后load user表里面查有没有该用户,该用户有啥权限。以后每次操作要校验有没有相应权限。

p.s.新建链接才会load权限。

2.查询的话先去缓冲区里面根据key查找有没有数据(缓存区里面的数据也是key-value);有就返回,没有去词法分析器

3.词法分析器:看sql语句对不对

4.优化器:看有没有走索引,假如join两个表,先走有索引的表。

5.执行器:调用引擎借口,获取查询结果。

数据库引擎按插件形式给服务层用,扩展性好。

可以根据表格对应设计的引擎去调用引擎接口,引擎去磁盘取数据。取到数据把返回执行器,这时可以存到缓存里面。

什么时候更新缓存?

更新数据需要清理缓存,更新频繁不用缓存,因为命中低。

所以读多写少时候用缓存。

(mysql8查询缓存被移除了。。因为查询缓存的效果取决于缓存的命中率,只有命中缓存的查询效果才能有改善,因此无法预测其性能。)

query_cache_type 看用不用缓存,参数0,1,2

0:都不用

1:都用

2:按需缓存 ,例如读特殊列,那么缓存结果。

eg:select SPE * from test

show status like "%Qcache%"      可以查看状态、命中等

二:Bin log 归档日志(逻辑日志)

服务层实现的,所有引擎公用

记录的是语句的原始逻辑,也就是过程

看bin log 开启了没:show variables like '%log_bin%'

flush logs 可以新建文件监控以后的过程

end_log_pos 记录了每次操作(节点)

可以根据timestamp(节点)或者pos序号恢复,具体操作指令可以百度。

就是指定节点恢复数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值