操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    數據庫的SQL引擎是數據庫重要的子系統之一,它對上負責承接應用程序發送的SQL語句,對下負責指揮執行器運行執行計劃。其中優化器作為SQL引擎中最重要、最復雜的模塊,被稱為數據庫的“大腦”,優化器產生的執行計劃的優劣直接決定數據庫的性能。本文從SQL語句開始介紹,對SQL引擎的各個模塊進行全面的說明。

    一、SQL引擎概覽

    SQL引擎是數據庫系統的重要組成部分,主要職責是將應用程序輸入的SQL語句在當前負載場景下生成高效的執行計劃,在SQL語句的高效執行上扮演重要角色。

    SQL語句在SQL引擎中的執行過程如下圖所示。

    圖SQL語句在SQL引擎中的執行流程

    從上圖中可以看出,應用程序的SQL語句需要經過SQL解析生成邏輯執行計劃、經過查詢優化生成物理執行計劃,然后將物理執行計劃轉交給查詢執行引擎做物理算子的執行操作。

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

    描述語言的特點是規定了需要獲取的 WHAT,而不關心 HOW,也就是只關注結果而不關注過程,因此SQL描述性的特點導致查詢優化在數據庫管理系統中具有非常重要的作用。

    查詢重寫則是在邏輯執行計劃的基礎上進行等價的關系代數變換,這種優化也可以稱為代數優化,雖然兩個關系代數式獲得的結果完全相同,但是它們的執行代價卻可能有很大的差異,這就構成了查詢重寫優化的基礎。

    在早期的數據庫管理系統中,通常采用基于啟發式規則的方法來生成最優的物理執行計劃,但是這種基于規則的優化的靈活度不夠,常常產生一些次優的執行計劃,而代價估算的引入sql獲取當前系統時間,則從根本上解決了基于規則優化的不足。

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

    二、SQL解析

    SQL語句在數據庫管理系統中的編譯過程符合編譯器實現的常規過程,需要進行詞法分析、語法分析和語義分析。

    (1)詞法分析:從查詢語句中識別出系統支持的關鍵字、標識符、運算符、終結符等,確定每個詞固有的詞性。(2)語法分析:根據SQL的標準定義語法規則,使用詞法分析中產生的詞去匹配語法規則,如果一個 SQL 語句能夠匹配一個語法規則,則生成對應的抽象語法樹( Tree,AST)。(3)語義分析:對語法樹進行有效性檢查,檢查語法樹中對應的表、列、函數、表達式是否有對應的元數據,將抽象語法樹轉換為邏輯執行計劃(關系代數表達式)。

    在SQL標準中,確定了SQL的關鍵字以及語法規則信息,SQL 解析器在做詞法分析的過程中會將一個SQL語句根據關鍵字信息以及間隔信息劃分為獨立的原子單 位,每個單位以一個詞的方式展現sql獲取當前系統時間,例如有SQL語句:

    SELECT w_name FROM warehouse WHERE w_no = 1;

    該SQL語句可以劃分的關鍵字、標識符、運算符、常量等原子單位如表1所示。

    表1 詞法分析的特征

    詞性

    內容

    關鍵字

    、FROM、WHERE

    標識符

    、、w_no

    操作符

    =

    常量

    1

    語法分析會根據詞法分析獲得的詞來匹配語法規則,最終生成一個抽象語法樹,

    每個詞作為語法樹的葉子節點出現,如下圖所示。

    圖 抽象語法樹

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

    (1)檢查關系的使用:FROM 子句中出現的關系必須是該查詢對應模式中的關系或視圖。(2)檢查與解析屬性的使用:在語句中或者WHERE子句中出現的各個屬性必須是FROM子句中某個關系或視圖的屬性。(3)檢查數據類型:所有屬性的數據類型必須是匹配的。在有效性檢查的同時,語義分析的過程還是有效性語義綁定(Bind)的過程,通過語義分析的檢查,抽象語法樹就轉換成一個邏輯執行計劃。邏輯執行計劃可以通過關系代數表達式的形式來表現,如下圖所示。

    圖 關系代數表達式

    三、查詢優化

    SQL語句在編寫的過程中,數據庫應用開發人員通常會考慮以不同的形式編寫SQL語句達到提升執行性能的目的。那么,為什么還需要查詢優化器來對 SQL進行優化呢? 這是因為一個應用程序可能會涉及大量的SQL語句,而且有些 SQL語句的邏輯極為復雜,數據庫開發人員很難面面俱到地寫出高性能語句,而查詢優化器則具有一些獨特的優勢:

    (1)查詢優化器和數據庫開發人員之間存在信息不對稱。查詢優化器在優化的過程中會參考數據庫統計模塊自動產生的統計信息,這些統計信息從各個角度來描述數據的分布情況,查詢優化器會綜合考慮統計信息中的各種數據,從而得到一個比較好的執行方案,而數據庫開發人員一方面無法全面地了解數據的分布情況,另一方面也很難通過統計信息構建一個精確的代價模型對執行計劃進行篩選。(2)查詢優化器和數據庫開發人員之間的時效性不同。數據庫中的數據瞬息萬變,一個在 A 時間點執行性能很高的執行計劃,在B時間點由于數據內容發生了變化,它的性能可能就很低,查詢優化器則隨時都能根據數據的變化調整執行計劃,而數據庫應用程序開發人員則只能手動地調整SQL語句,和查詢優化器相比,它的時效性比較低。(3)查詢優化器和數據庫開發人員的計算能力不同。目前計算機的計算能力已經大幅提高,在執行數值計算方面和人腦相比具有巨大的優勢,查詢優化器對一個 SQL語句進行優化時,可以從成百上千個執行方案中選擇一個最優方案,而人腦要計算這幾百種方案需要的時間要遠遠長于計算機。

    因此,查詢優化器是提升查詢效率的非常重要的一個手段,雖然一些數據庫也提供了人工干預執行計劃生成的方法,但是通常而言,查詢優化器的優化過程對數據庫開發人員是透明的,它自動進行邏輯上的等價變換、自動進行物理執行計劃的篩選,極大地提高了數據庫應用程序開發人員的“生產力”。

    依據優化方法的不同,優化器的優化技術可以分為:

    (1)RBO(Rule Based ,基于規則的查詢優化):根據預定義的啟發式規則對SQL語句進行優化。(2)CBO(n,基于代價的查詢優化):對SQL語句對應的待選執行路徑進行代價估算,從待選路徑中選擇代價最低的執行路徑作為最終的執行計劃。(3)ABO(AI Based ,基于機器學習的查詢優化):收集執行計劃的特征信息,借助機器學習模型獲得經驗信息,進而對執行計劃進行調優,獲得最優的執行計劃。

    在早期的數據庫中,查詢優化器通常采用啟發式規則進行優化,這種優化方式不夠靈活,往往難以獲得最優的執行代價,而基于代價的優化則能夠針對大多數場景高效篩選出性能較好的執行計劃,但面對千人千面的用戶和日趨復雜的實際查詢場景,普適性的查詢優化難以捕捉到用戶特定的查詢需求、數據分布、硬件性能等特征,難以全方位滿足實際的優化需求。

    近年來 AI技術發展迅速,特別是在深度學習領域。ABO 在建模效率、估算準確率和自適應性等方面都有很大優勢,有望打破 RBO 和 CBO 基于靜態模型的限制。通過對歷史經驗的不斷學習,ABO 將目標場景的模式進行抽象化,形成動態的模型,自適應地針對用戶的實際場景進行優化。采用基于 CBO 的優化技術,另外在ABO方面也在進行積極探索。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有