MySQL在执行查询语句时,会通过一些算法来计算不同查询方案(比如通过不同的索引)的成本,从而得出一个执行成本最低的方案,在评估时主要考虑两个方面:I/O成本和CPU成本。
MySQL对于一些操作的类型定义了对应的成本数值,比如:在InnoDB中,读取一个页的成本是1.0,读取以及检测一条记录是否符合搜索条件的成本是0.2。
MySQL的优化器会根据以下步骤找出成本最低的执行方案:
连接查询的成本分为两部分:
连接查询总成本 = 单词访问驱动表的成本 + 驱动表扇出值 * 单词访问被驱动表的成本
对于内连接,由于驱动表和被驱动表的位置可以互换,一次还要考虑最优的表连接顺序。