【Mysql】查询优化

基于成本

Mysql执行一个查询可以有不同的执行方案,它会选择其中成本最低的方案.
主要计算的就是:

  • 全表扫描成本
  • 针对每个索引计算不同的访问方式的成本

成本其中包括 I/O成本和CPU成本
InnoDB存储引擎规定 读取一个页面花费的成本默认是1.0(I/O成本),读取以及检测一条记录是否符合搜素条件的成本为0.2(CPU成本).

如果是计算辅助索引成本 还会加上 回表成本(因为辅助索引的叶子结点存的是主键而不是真实数据).

I/O成本

InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本

CPU成本

读取以及检测记录是否满足对应的搜索条件 对结果集进行排序等这些操作损耗的时间为CPU成本

join

连接原理

连接的大致原理:

  • 选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的访问形式来执行对驱动表的单表查询
  • 对上一步骤中查询驱动表得到的结果集中的每一条记录,都分别到被驱动表中查找匹配的记录

对应的伪代码:

for each row in t1{
   
    //遍历满足对t1单表查询结果集中的每一条记录
	for each row in t2{
   
    //对某条t1表的记录来说,遍历满足对t2单表查询结果集中的每一条记录
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章