MySQL成本优化

MySQL的执行成本主要由I/O和CPU两部分构成,包括从磁盘加载数据到内存的I/O成本和处理记录的CPU成本。在查询优化过程中,会考虑全表扫描的代价,计算不同索引的使用成本,选择最低成本的执行方案。对于B+树索引,特定的搜索条件如等号、范围和LIKE操作符可以利用索引。此外,文章提到了基于索引统计数据的查询成本估算方法。
摘要由CSDN通过智能技术生成

什么是成本

Mysql中的执行成本是由两个方面组成:

  • I/O成本:把数据从磁盘加载到内存中,读取一个页面话费的成本默认是1.0。
  • CPU成本:读取记录以及检测记录是否满足对应的搜索条件、对结果集进行排序等。读取或者检测一条记录是否符合搜索条件的成默认是0.2。

单表查询的成本

基于成本的优化步骤

  1. 根据搜索条件,找出所有可能使用的索引
  2. 计算全表扫描的代价
  3. 计算使用不同索引执行查询的代价
  4. 对比各中执行方案的代价,找出成本最低的方案

1、根据搜索条件,找出所有可能使用的索引
对于B+树来说,只要索引列和常数使⽤=、<=>、IN、NOT IN、IS NULL、IS NOT NULL、>、<、>=、<=、BETWEEN、!=(不等于也可以写成<>)或者LIKE操作符连接起来,就可以产⽣⼀个所谓的范围区间(LIKE匹配字符串前缀也⾏),也就是说这些搜索条件都可能使⽤到索引,把⼀个查询中可能使⽤到的索引称之为possible keys
2、计算全表扫描的代价
对于InnoDB存储引擎来说,全表扫描的意思就是把聚簇索引中的记录都依次和给定的搜索条件做⼀下⽐较,把符合搜索条件的记录加⼊到结果集,所以需要将聚簇索引对应的⻚⾯加载到内存中,然后再检测记录是否符合搜索条件。由于查询成本=I/O成本+CPU成本,所以计算全表扫描的代价需要两个信息:

  • 聚簇索引占⽤的⻚⾯数
  • 该表中的记录数

3、计算使⽤不同索引执⾏查询的代价,找出索引成本最低的那个

2.3 基于索引统计数据的成本计算

通过直接访问索引对应的B+树来计算某个范围区间对应的索引记录条数的⽅
式称之为index dive
当IN语句中的参数个数⼩于200个的话,将使⽤index dive的⽅式计算各个单点区间对应的记录条数,如果⼤于或等于200个的话,要使⽤所谓的索引统计数据来进⾏估算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值