成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Database Inside 系列 ——SQL 是如何執行的

開發 前端
將適合人閱讀的 SQL 語句進行分詞(token),并進行基本語法檢查。然后基于關系代數,構建成抽象語法樹(AST,Abstract Syntax Tree)。其中葉子節點為表,中間節點為運算符。

SQL 的三維側寫

SQL 起源于上世紀七十年代的 IBM R 系統,是一個針對關系型數據庫的聲明式查詢語言。一句話引出三個點:

1. 關系型(relational):基于關系代數理論的一種數據建模方式,其他的建模方式如文檔數據庫、圖數據庫等。以 SQL 表的方式來理解,可以將任何數據集抽象為一張二維表,每行一個元組(tuple),每個元組有多個屬性列;將對數據集的查詢抽象為一組運算符的組合,也即二維表的一組變換。常見的運算符:

圖片

關系表的變換

選擇 (σ):針對單張二維表,選擇其中一些行;對應 SQL 中 where 子句

投影 (π):針對單張二維表,選擇其中某幾列;對應 SQL 中 select xx 子句

自然連接 (?):針對兩張二維表,按某一列上等值進行合并;對應 SQL 中 join 子句

2. 聲明式(declarative):與命令式(imperative)相對,可類比編程中的接口。側重于描述而非實現。舉個例子感受一下:

聲明式:“找出教三今天的空閑教室”

命令式:“1. 找出教三所有教室 2. 對于每間教室查詢課表看其是否空閑 3. 如果空閑則加入結果集”

3. 查詢語言(Query):顧名思義,這是一門專門用來做諸如“找教室”一類的對滿足條件的數據進行查詢的語言。雖然他是圖靈完備的,但一般不用于像通用編程語言 C++ 等來編寫復雜軟件。

SQL 執行過程

圖片

CMU 15445 課程圖

SQL 也是一門語言,因此其執行過程和編譯器前端類似,參考上圖(來自 cmu 15-445)可粗分為數個步驟:

解析(Parsing):將適合人閱讀的 SQL 語句進行分詞(token),并進行基本語法檢查。然后基于關系代數,構建成抽象語法樹(AST,Abstract Syntax Tree)。其中葉子節點為表,中間節點為運算符。

校驗(Validating):檢查所插入數據格式是否滿足之前所定義的模式。舉個例子,學生表定義了學號、姓名、課程三列,則插入的數據每一行不能多于三個屬性。

計劃(Planning):使用模式信息,將語法樹中元素(各種有意義的名稱)轉成內部表示(各種 無意義且不重復 id),生成邏輯計劃。

優化(Optimization):邏輯計劃由多個數據變換操作構成,我們可以基于關系代數中算子的一些性質(比如交換性、結合性),調整變換順序和組合,使得查詢所耗費資源(包括計算、存儲和網絡帶寬等)最小,最后生成物理執行計劃,常包括基于規則和基于代價的兩種方式。

執行(Execution):將優化過后的執行計劃(一般仍是樹形)進行執行。包括從外存撈數據到內存和在內存中對數據做各種變換。不管數據在外存表現為什么形式,撈到內存后可以理解為一張前面提到的二維表,然后按樹結構施加各種算子,進行計算。

有時候校驗階段也被歸入解析范疇,有時候執行階段中的表達式求值會單拎出來說,但總的職責就這幾個,排列順序基本確定,只是劃分可能有出入。

之后對于每個階段,會分別出一篇小文。

參考

https://15445.courses.cs.cmu.edu/fall2022/notes/02-modernsql.pdf

https://15445.courses.cs.cmu.edu/fall2022/notes/14-optimization.pdf

Database System Concepts, Chapter 15 Query Processing and Chapter 16 Query Optimization

責任編輯:武曉燕 來源: 木鳥雜記
相關推薦

2022-07-28 09:13:30

MySQL數據庫

2024-12-26 08:16:26

2022-04-10 23:42:33

MySQLSQL數據庫

2022-02-11 14:43:53

SQL語句C/S架構

2024-12-17 06:20:00

MySQLSQL語句數據庫

2015-11-12 09:17:30

Java Main執行

2024-09-14 14:18:43

2010-11-04 09:43:46

LINQ to SQL

2012-10-24 14:47:50

IBMdw

2021-06-07 08:37:03

SQL 查詢語句

2013-10-29 16:27:23

MySQLSQL語句

2023-12-27 09:32:47

SQL語句數據

2025-02-17 09:22:16

MySQLSQL語句

2010-09-06 13:17:19

SQL Server語句

2019-11-15 18:00:18

MySQLSQL數據庫

2010-03-03 08:36:49

HTML 5 Web

2023-06-05 16:38:51

JavaScript編程語言V8

2022-09-16 08:32:25

JavaC++語言

2021-06-26 14:59:13

SpringTransaction執行

2010-04-21 11:12:00

SQL PLUS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区在线观看 | 日韩欧美一区二区在线播放 | 一区二区三区免费 | 香蕉久久久| 成人午夜在线视频 | 亚洲精品日韩视频 | 欧美精| 国产一区二区三区免费观看视频 | 国产精品久久久久久久免费观看 | 日韩一区二区三区视频 | 欧美精品第一区 | 欧美日韩一本 | 日日综合 | 日韩在线不卡 | 在线亚洲精品 | 成人免费看片又大又黄 | 黄色一级片aaa | 久久综合久 | 国产一区二区三区在线观看免费 | japan21xxxxhd美女 日本欧美国产在线 | 亚洲国产成人精品女人久久久 | 欧美视频精品 | 国产精品免费看 | 亚洲一区二区免费视频 | 超碰8 | 在线观看成人小视频 | 国产日韩欧美一区二区 | www.99re| 成人免费黄视频 | 日日精品| 日日夜夜精品视频 | 国产精品色 | www国产成人免费观看视频,深夜成人网 | 国产蜜臀| 国产久 | av黄色在线 | 91精品亚洲| 亚洲国产成人精品女人久久久 | 精品视频网 | 九九热这里只有精品在线观看 | 国产精品国产三级国产aⅴ中文 |