009优化器

优化器的逻辑

优化器选择索引的目的是选择一个执行方案,用最小的代价去执行语句。

数据库里影响执行代价的因素。

1)扫描行数 ,扫描的行数越少,意味着访问磁盘的数据的次数越小,消耗cpu的资源越少

2)是否使用临用表

2)是否排序

Mysql是如何得到索引的激素和

选错索引的场景

我们平常不断删除历史数据和新增数据索引时可能会导致数据库选错索引

解决方案

对于索引统计信息不准确导致的问题,你可以用 analyze table 来解决。

而对于其他优化器误判的情况,你可以在应用端用 force index 来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。

提出问题:

mysql> select * from t where (a between 1 and 1000)  and (b between 50000 and 100000) order by b limit 1;

给a或b加一个索引 你觉得哪种速度更快

答案: 用a

因为以a为索引 会先用索引查询1000条数据 然后在根据b between 50000 and 100000 的条件过滤,

如果以b为索引 会先查询50000条数据再根据a的条件过滤

我当时想的and语句会分别查询a 和b的行然后求交集再排序 ,由于排序的时候是b所以我想选b为索引

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值