退役筆記一#MySQL = lambda sql : sql + ' Source Code 4 Explain Plan '

來源:互聯網
上載者:User

標籤:os   io   for   art   ar   div   amp   sql   

MySQL 查詢運行過程 大致分為4個階段吧:


文法分析(sql_parse.cc<詞法分析, 文法分析, 語義檢查 >)

>>sql_resolver.cc # JOIN.prepare

產生邏輯查詢plan(sql_optimizer.cc)

>># JOIN.optimize

產生物理查詢plan(sql_planner.cc)

run the explain plan(sql_executor.cc) JOIN.exec





JOIN.prepare() :

子查詢的冗餘子句消除

in類型子查詢最佳化 resolve_subquery() 

將all/any等類型子查詢轉換為min/max操作 對簡單子查詢進行的最佳化

 

JOIN.optimize():

子查詢上拉 flatten_subqueries()

把外串連最佳化為內串連   simplify_joins()

消除嵌套串連

where子句, join/on子句,having子句化簡,含有常量的運算式化簡,等式合并 optimize_cond() opt_sum_query()

最佳化沒有group by 子句的下的count(*) min() man()

確定多表串連路徑 make_join_statistice()

最佳化distinct

建立暫時表格儲存體暫時結果最佳化分組排序 choose_table_order()


事實上,邏輯與物理最佳化,有點混亂,分得不明白,

就是在物理查詢最佳化之後,繼續進行了部分邏輯最佳化





僅兩種單表掃描方式:

index scan(others), table scan(JT_ALL)

Opt_range.h > class QUICK_SELECT_I > 利用索引掃描滴總介面

其幾個子類 見source code;




基本的類和結構體:

查詢樹 class st_select_lex 

索引 struct st_key_create_information   class Key_part_spec

串連表 st_join_table

串連類  JOIN : public Sql_alloc

條件  COND_EQUAL

位置  struct st_position

代價估算  Cost_estimate
















SELECT NOW(),CURDATE(),CURTIME()




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.