mysql基于成本的优化

mysql在实际执行查询语句之前会经查询优化器评估一个成本最低的方式去执行查询,成本是怎么评估的呢?分为两个部分:

  • IO成本:mysql规定读取一个页面的成本是1.0
  • CPU成本:CPU成本是指对记录进行条件判断的成本,mysql规定判断一条记录的成本为0.2

从上可以看出,我们需要两个数据:

  • 核算IO成本需要页面数量
  • 核算CPU成本需要记录数

总成本=IO成本+CPU成本

通常选择最低成本的方式执行查询包括下述步骤:

  • 计算全表扫描成本
  • 计算使用各种索引的成本
  • 选择成本低的去执行查询语句

针对全表扫描的成本核算比较简单,我们需要的两部分数据可以直接通过查看表的统计信息得出:show table status like ‘%xxx%’,列出的信息中包括记录条数,不过针对innodb引擎而言不太准确。页面数量可以计算出来,可以使用data_length即记录占用的总字节数除以一个页面的大小得出总页数。不过计算成本的时候会加入一些微调值,这些都不需要关注。

如果查询条件中有二级索引列,优先计算唯一二级索引,计算每种二级索引的成本,可能会遇到二级索引+回表的形式。诸如索引的成本计算比较复杂,不深入。

完。

你可能感兴趣的:(mysql,基于成本)