腾讯二面
腾讯二面面试官问一次sql执行的时候,要进行几次IO操作,我根据之前八股文回答说如果有索引,应该是三到四次,如果没有索引,应该是走全表扫描,和页表缓存的大小有关。
然后他又问你知道一次IO要花费多长时间吗,如果是第一次查询,不会命中缓存,好像也不会很慢
有没有大佬解释一下
#牛客AI配图神器#
然后他又问你知道一次IO要花费多长时间吗,如果是第一次查询,不会命中缓存,好像也不会很慢
有没有大佬解释一下
全部评论
mysql8.0以前的server层有缓存,所以如果是查询,那么先走缓存,缓存没命中再走引擎。引擎先走buffer pool,还是找不到再走io。走io看索引。一般b+树是三阶的,所以磁盘io三次。如果是全表扫描的话复杂一些,数据库会顺序读取每个数据块,假如说一个表有100个数据块,那就要io100次。
一点点个人的愚见
佬啥部门呀
其实可能不会这么多,mysql有缓存池和自适应hash索引,大部份索引页都会在缓存池,或者自适应hash索引把页直接建立hash表,使得只有数据页进行io加载
相关推荐

点赞 评论 收藏
分享