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