为什么要避免回表
-
mysql维护着两种索引树:聚集索引、非聚集索引。我们建立的索引都属于非聚集索引。通过非聚集索引检索时,只能检索到符合条件的rowId,拿着这些id去聚集索引里获取数据的过程就是回表
image.png
-
通常,如果表数据量过大且符合条件的行较多,符合条件的rowId又是分散的,此时回表查询将会进行很多次io。因为mysql每次io只获取一个磁盘块里的数据,rowId分散时,可能一个磁盘块里符合条件的数据较少,如果要获取所有数据就要io较多次数。
-
引擎存储参考:链接

网友评论