MySQL成本优化

什么是成本

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个的话,要使⽤所谓的索引统计数据来进⾏估算。

你可能感兴趣的:(Mysql,mysql,数据库)