SQL 語句是怎么執(zhí)行的?你學會了嗎?
作者:李華
執(zhí)行該計劃并返回結(jié)果。這一階段包括訪問表中的必要數(shù)據(jù)、執(zhí)行任何過濾或條件語句、執(zhí)行 SQL 語句中指定的 join、聚合和排序操作。
今天來聊聊喜聞樂見的 SQL。
數(shù)據(jù)庫執(zhí)行 SQL 語句有幾個步驟,包括:
- 解析 SQL 語句并檢查其有效性。
- 將 SQL 轉(zhuǎn)換為內(nèi)部表示結(jié)構(gòu),如關系代數(shù)。并創(chuàng)建查詢樹或查詢圖,表示操作的邏輯順序。
- 優(yōu)化內(nèi)部表示結(jié)構(gòu),并創(chuàng)建一個執(zhí)行計劃。優(yōu)化器會根據(jù)索引、統(tǒng)計數(shù)據(jù)、可用資源和查詢復雜度等因素分析各種潛在的執(zhí)行計劃。其目標是確定執(zhí)行查詢的最有效方式。
- 執(zhí)行該計劃并返回結(jié)果。這一階段包括訪問表中的必要數(shù)據(jù)、執(zhí)行任何過濾或條件語句、執(zhí)行 SQL 語句中指定的 join、聚合和排序操作。
下圖以可視化的方式展示了這種執(zhí)行過程。
圖片
SQL 的執(zhí)行非常復雜,需要考慮很多因素,例如:
- 索引和緩存的使用
- 表連接 (Join) 的順序
- 并發(fā)控制
- 事務管理
我們下面來看看 SQL join 如何工作?下圖詳細說明了 4 種 SQL join 的工作方式。
圖片
- 內(nèi)部連接 - 返回兩個表中匹配的記錄。
- 左連接 - 返回左表中的所有記錄和右表中的匹配記錄。
- 右連接 - 返回右表中的所有記錄和左表中的匹配記錄。
- 全外連接 - 返回左表或右表中匹配的所有記錄。
責任編輯:武曉燕
來源:
ByteByteGo





































