建個(gè)網(wǎng)站費(fèi)用微信管理系統(tǒng)軟件
作為優(yōu)化器后的真正執(zhí)行語句的層,執(zhí)行器有三種方式和存儲(chǔ)引擎(一般是innoDB)交互
- 主鍵索引查詢
查詢的條件用到了主鍵,這個(gè)是全表唯一的,優(yōu)化器會(huì)選擇const類型來查詢,然后while循環(huán)去根據(jù)主鍵索引的B+樹結(jié)構(gòu)一條一條的查詢是否符合條件,符合就發(fā)給客戶端,不符合就跳過該條記錄。(是一條一條的發(fā)送回server層的,只不過server要等到全部查詢結(jié)束才會(huì)返還用戶)。第一次查詢會(huì)調(diào)用read_first_record來查詢,后續(xù)while循環(huán)調(diào)用read_record繼續(xù)查詢 - 全表掃描
沒有任何索引能用,那么優(yōu)化器會(huì)選ALL類型的查詢,同理,read_first_record,然后while調(diào)用read_record一條一條查詢是否符合條件,符合就發(fā)回server層,反之跳過繼續(xù)查詢 - 索引下推
能夠減少回表次數(shù),提升查詢效率,因?yàn)槠鋵erver層負(fù)責(zé)的事情下推到存儲(chǔ)引擎層來處理了(盡管仍然沒法完全發(fā)揮聯(lián)合索引的功效),下面這個(gè)定位到age>20后:1、正常來講要在二級(jí)索引B+樹定位到age>20的第一條記錄后,根據(jù)主鍵id去回表,將完整一行記錄返回server層,然后在server層判斷reward是否>100000,成立則發(fā)回客戶端,否則跳過記錄讓存儲(chǔ)引擎繼續(xù)查;2、但是現(xiàn)在有索引下推了,在定位到第一條記錄后,直接讓存儲(chǔ)引擎判斷reward>100000不,成立的話回表然后發(fā)送數(shù)據(jù)給server層,否則直接跳過。優(yōu)化器會(huì)采取Using index condition類型,代表使用了索引下推。