自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何掌握 OpenGauss 數(shù)據(jù)庫核心技術(shù)?秘訣之一:拿捏SQL引擎

運維 數(shù)據(jù)庫運維
數(shù)據(jù)庫的SQL引擎是數(shù)據(jù)庫重要的子系統(tǒng)之一,它對上負責(zé)承接應(yīng)用程序發(fā)送過來的SQL語句,對下則負責(zé)指揮執(zhí)行器運行執(zhí)行計劃。其中優(yōu)化器作為SQL引擎中最重要、最復(fù)雜的模塊,被稱為數(shù)據(jù)庫的“大腦”,優(yōu)化器產(chǎn)生的執(zhí)行計劃的優(yōu)劣直接決定數(shù)據(jù)庫的性能。

 [[436755]]

本文轉(zhuǎn)載自微信公眾號「數(shù)據(jù)和云」,作者數(shù)據(jù)和云。轉(zhuǎn)載本文請聯(lián)系數(shù)據(jù)和云公眾號。

數(shù)據(jù)庫的SQL引擎是數(shù)據(jù)庫重要的子系統(tǒng)之一,它對上負責(zé)承接應(yīng)用程序發(fā)送過來的SQL語句,對下則負責(zé)指揮執(zhí)行器運行執(zhí)行計劃。其中優(yōu)化器作為SQL引擎中最重要、最復(fù)雜的模塊,被稱為數(shù)據(jù)庫的“大腦”,優(yōu)化器產(chǎn)生的執(zhí)行計劃的優(yōu)劣直接決定數(shù)據(jù)庫的性能。

SQL引擎概覽

SQL引擎是數(shù)據(jù)庫系統(tǒng)重要組成部分,它的主要職責(zé)是負責(zé)將應(yīng)用程序輸入的SQL在當前負載場景下生成高效的執(zhí)行計劃,在SQL的高效執(zhí)行上扮演重要角色。SQL在SQL引擎里執(zhí)行過程,如圖7-1所示。

圖1 SQL執(zhí)行流程

從圖7-1中可以看出,應(yīng)用程序的SQL需要經(jīng)過SQL解析生成邏輯執(zhí)行計劃、經(jīng)過查詢優(yōu)化生成物理執(zhí)行計劃,然后將物理執(zhí)行計劃轉(zhuǎn)交給查詢執(zhí)行引擎做物理算子的執(zhí)行操作。

SQL解析通常包含詞法分析、語法分析、語義分析幾個子模塊。SQL語言是介于關(guān)系演算和關(guān)系代數(shù)之間一種描述性語言,它吸取了關(guān)系代數(shù)中一部分邏輯算子的描述,而放棄了關(guān)系代數(shù)中“過程化”的部分,SQL解析主要的作用就是將一個SQL語句編譯成為一個由關(guān)系算子組成的邏輯執(zhí)行計劃。

描述語言的特點是規(guī)定了需要獲取的“WHAT”,而不關(guān)心“HOW”,也就是只關(guān)注結(jié)果而不關(guān)注過程,因此SQL語言描述性的特點導(dǎo)致查詢優(yōu)化在數(shù)據(jù)庫管理系統(tǒng)中具有非常重要的作用。

查詢重寫則是在邏輯執(zhí)行計劃的基礎(chǔ)上進行等價的關(guān)系代數(shù)變換,這種優(yōu)化也可以稱為代數(shù)優(yōu)化,雖然兩個關(guān)系代數(shù)式獲得的結(jié)果完全相同,但是它們的執(zhí)行代價卻可能有很大的差異,這就構(gòu)成了查詢重寫優(yōu)化的基礎(chǔ)。

在早期的數(shù)據(jù)庫管理系統(tǒng)中,通常采用基于啟發(fā)式規(guī)則的方法來生成最優(yōu)的物理執(zhí)行計劃,但是這種基于規(guī)則的優(yōu)化的靈活度不夠,常常導(dǎo)致產(chǎn)生一些次優(yōu)的執(zhí)行計劃,而代價估算的引入,則從根本上解決了基于規(guī)則優(yōu)化的不足。

基于代價的優(yōu)化器一方面生成“候選”的物理執(zhí)行路徑,另一方面對這些執(zhí)行路徑計算它們的執(zhí)行代價,這樣就建立了執(zhí)行路徑的篩選標準,從而能夠通過比較代價而獲得最優(yōu)的物理執(zhí)行計劃。

SQL解析

SQL語句在數(shù)據(jù)庫管理系統(tǒng)中的編譯過程符合編譯器實現(xiàn)的常規(guī)過程,需要進行詞法分析、語法分析和語義分析。

§ 詞法分析:從查詢語句中識別出系統(tǒng)支持的關(guān)鍵字、標識符、操作符、終結(jié)符等,每個詞確定自己固有的詞性。

§ 語法分析:根據(jù)SQL語言的標準定義語法規(guī)則,使用詞法分析中產(chǎn)生的詞去匹配語法規(guī)則,如果一個SQL語句能夠匹配一個語法規(guī)則,則生成對應(yīng)的抽象語法樹(Abstract Syntax Tree,AST)。

§ 語義分析:對語法樹(AST)進行有效性檢查,檢查語法樹中對應(yīng)的表、列、函數(shù)、表達式是否有對應(yīng)的元數(shù)據(jù),將抽象語法樹轉(zhuǎn)換為邏輯執(zhí)行計劃(關(guān)系代數(shù)表達式)。

在SQL語言標準中,確定了SQL語言的關(guān)鍵字以及語法規(guī)則信息,SQL解析器在做詞法分析的過程中會將一個SQL語句根據(jù)關(guān)鍵字信息以及間隔信息劃分為獨立的原子單位,每個單位以一個詞的方式展現(xiàn),例如有SQL語句:

  1. SELECT w_name FROM warehouse WHERE w_no = 1; 

可以劃分的關(guān)鍵字、標識符、操作符、常量等原子單位,如表7-1所示。

詞性

內(nèi)容

關(guān)鍵字

SELECT、FROM、WHERE

標識符

w_name、warehouse、w_no

操作符

=

常量

1


表1 詞法分析的特征

語法分析會根據(jù)詞法分析獲得的詞來匹配語法規(guī)則,最終生成一個抽象語法樹(AST),每個詞作為語法樹的葉子結(jié)點出現(xiàn),如圖7-2所示。

圖2 抽象語法樹

抽象語法樹表達的語義還僅僅限制在能夠保證應(yīng)用的SQL語句符合SQL標準的規(guī)范,但是對于SQL語句的內(nèi)在含義還需要做有效性的檢查。

§ 檢查關(guān)系的使用:FROM子句中出現(xiàn)的關(guān)系必須是該查詢對應(yīng)模式中的關(guān)系或視圖。

§ 檢查與解析屬性的使用:在SELECT句中或者WHERE子句中出現(xiàn)的各個屬性必須是FROM子句中某個關(guān)系或視圖的屬性。

§ 檢查數(shù)據(jù)類型:所有屬性的數(shù)據(jù)類型必須是匹配的。

在有效性檢查的同時,語義分析的過程還是有效性語義綁定(Bind)的過程,通過語義分析的檢查,抽象語法樹就轉(zhuǎn)換成一個邏輯執(zhí)行計劃,邏輯執(zhí)行計劃可以通過關(guān)系代數(shù)表達式的形式來表現(xiàn),如圖7-3所示。

圖3 關(guān)系代數(shù)表達式

 

責(zé)任編輯:武曉燕 來源: 數(shù)據(jù)和云
相關(guān)推薦

2021-07-28 07:53:20

C#.NET設(shè)計

2022-06-10 17:37:37

數(shù)據(jù)庫

2023-12-12 09:43:17

桌面開發(fā)Net消息機制

2020-12-10 11:00:37

JavaJVM命令

2022-07-06 15:50:04

數(shù)據(jù)計算

2024-10-08 10:44:32

2011-03-30 13:24:23

SQL Server數(shù)故障修復(fù)

2017-12-21 14:48:43

數(shù)據(jù)安全數(shù)據(jù)泄漏檢測技術(shù)

2010-04-19 15:09:10

Oracle數(shù)據(jù)庫

2020-12-11 13:27:12

大數(shù)據(jù)大數(shù)據(jù)技術(shù)

2019-04-30 13:54:55

大數(shù)據(jù)Hadoop數(shù)據(jù)清洗

2018-02-27 15:48:31

數(shù)據(jù)庫SQL鎖死

2019-05-15 08:26:44

工業(yè)物聯(lián)網(wǎng)MQTT物聯(lián)網(wǎng)

2019-03-05 14:57:21

大數(shù)據(jù)Hadoop框架

2009-03-19 09:30:59

2010-08-13 09:58:15

Gooele

2010-06-28 09:53:11

SQL Server數(shù)

2010-07-15 17:28:50

SQL Server

2022-05-07 14:31:46

物聯(lián)網(wǎng)

2024-02-02 10:51:53

點贊
收藏

51CTO技術(shù)棧公眾號