在使用MySQL查詢時,回表過濾指的是查詢的數(shù)據(jù)在索引中已經(jīng)被過濾掉了,但是MySQL還需要在對應(yīng)的數(shù)據(jù)表中再次進行一次過濾,才能將符合條件的數(shù)據(jù)返回給用戶。
回表過濾的發(fā)生位置在MySQL的存儲引擎層,因為存儲引擎通過索引定位到需要返回數(shù)據(jù)的頁,但頁內(nèi)的數(shù)據(jù)可能并不符合查詢條件,因此需要在對應(yīng)的數(shù)據(jù)表中再次過濾。
示例代碼: SELECT * FROM `table` WHERE `name` = 'Tom';
假設(shè)`table`表以`name`字段建立了索引,查詢`name`等于`Tom`的數(shù)據(jù)時,MySQL會首先通過索引定位到數(shù)據(jù)所在的頁;然后再回到數(shù)據(jù)表中,逐一過濾每一行數(shù)據(jù),將符合條件的數(shù)據(jù)返回給用戶。
回表過濾是MySQL中常見的優(yōu)化點,一般我們可以通過在建立索引時,將查詢語句中需要過濾的字段都加入到索引中,避免回表過濾,提高查詢效率。
上一篇mysql回車后一閃而過
下一篇dockerzk