什么是优化器?
得到解析樹之后,是不是執(zhí)行SQL 語句了呢?
這里我們有一個(gè)問題,一條SQL 語句是不是只有一種執(zhí)行方式?或者說數(shù)據(jù)庫最終執(zhí)行的SQL 是不是就是我們發(fā)送的SQL?
這個(gè)答案是否定的。一條SQL 語句是可以有很多種執(zhí)行方式的,最終返回相同的結(jié)果,他們是等價(jià)的。但是如果有這么多種執(zhí)行方式,這些執(zhí)行方式怎么得到的?最終選擇哪一種去執(zhí)行?根據(jù)什么判斷標(biāo)準(zhǔn)去選擇?
這個(gè)就是MySQL 的查詢優(yōu)化器的模塊(Optimizer)。
查詢優(yōu)化器的目的就是根據(jù)解析樹生成不同的執(zhí)行計(jì)劃(Execution Plan),然后選擇一種最優(yōu)的執(zhí)行計(jì)劃,MySQL 里面使用的是基于開銷(cost)的優(yōu)化器,那種執(zhí)行計(jì)劃開銷最小,就用哪種。
可以使用這個(gè)命令查看查詢的開銷:
show status like 'Last_query_cost';https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Last_query_cost
?
總結(jié)