Skip to content

Latest commit

 

History

History
29 lines (17 loc) · 1.24 KB

query-cost.md

File metadata and controls

29 lines (17 loc) · 1.24 KB

查询成本

MySQL在执行查询语句时,会通过一些算法来计算不同查询方案(比如通过不同的索引)的成本,从而得出一个执行成本最低的方案,在评估时主要考虑两个方面:I/O成本和CPU成本。

MySQL对于一些操作的类型定义了对应的成本数值,比如:在InnoDB中,读取一个页的成本是1.0,读取以及检测一条记录是否符合搜索条件的成本是0.2。

单表查询

MySQL的优化器会根据以下步骤找出成本最低的执行方案:

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

连接查询

连接查询的成本分为两部分:

  1. 单次查询驱动表的成本。
  2. 多次查询被驱动表的成本,查询的次数取决于查询驱动表后得到的记录条数(也称为扇出值)。

连接查询总成本 = 单词访问驱动表的成本 + 驱动表扇出值 * 单词访问被驱动表的成本

对于内连接,由于驱动表和被驱动表的位置可以互换,一次还要考虑最优的表连接顺序。

参考

  1. 《MySQL是怎样运行的》