待執行語句 :
mysql> select * from T where ID=10;
比如我們這個例子中的表T中, ID字段沒有索引, 那麼執行器的執行流程是這樣的:
- 1.調用InnoDB引擎接口取這個表的第一行, 判斷ID值是不是10, 如果不是則跳過, 如果是則將這行存在結果集中;
- 2.調用引擎接口取“下一行”, 重複相同的判斷邏輯, 直到取到這個表的最後一行。
- 3.執行器將上述遍歷過程中所有滿足條件的行組成的記錄集作爲結果集返回給客戶端。
對於有索引的表, 執行的邏輯也差不多。 第一次調用的是“取滿足條件的第一行”這個接口, 之後循環取“滿足條件的下一行”這個接口, 這些接口都是引擎中已經定義好的。
TODO :
帶索引的表和不帶索引的表,查詢接口是不一樣的嗎?這個還要再查一查。待補充吧。
內容來源:mysql45講