mysql關聯查詢優化器

                         mysql關聯查詢優化器

目錄

一、關聯查詢的含義

 二、關聯查詢優化器

三、舉例

四、貪婪模式


一、關聯查詢的含義

mysql的關聯查詢:總是從一個表開始一直嵌套循環、回溯完成所有表關聯,是一個左側深度優化的樹。
 

 二、關聯查詢優化器

它決定了多個表關聯時的順序,通常多表 關聯的時候,可以 有多種不同的關聯順序來獲得相結果的執行結果。 關聯查詢 優化器通過 評估不同順序時的成本來選擇一個代價最小的關聯 順序。

三、舉例

這是一條普通的關聯查詢,用explain來得到他們表執行關聯的順序,會得到跟我們上面分析的順序不一樣。

explain select film.film_id, file,title, actor.actor_id, actor.firest_name from film inner join film_actor using(film_id) 
inner join actor using(actor_id);

優化器選擇的關聯順序是會讓查詢進行更少的嵌套循環和回溯操作。不過有時候,優化器給出的並不是最優的關聯順序徐。這時可以使用 STRAGHT_JOIN 關鍵字重寫查詢,讓優化器按照你認爲的最優的關聯順序執行。 

explain select STRAGHT_JOIN film.film_id, file,title, actor.actor_id, actor.firest_name from film inner join
 film_actor using(film_id) inner join actor using(actor_id);

用下面的命令查看關聯順序的預估成本。

show status like 'last_query_cost';

四、貪婪模式

不過糟糕的是,如果有超過n個表的關聯,那麼需要檢查n的階乘種關聯順序,稱爲執行計劃的“搜索空間”。若是10個表的關聯,那麼共有3628800種不同的關聯順序。這時,優化器會選擇使用“貪婪”搜索的方式查找“最優”的關聯順序。當關聯的表超過 optimizer_search_depth的限制時,就會選擇“貪婪”搜索模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章