日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

(数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化

發(fā)布時間:2025/3/15 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注意:

  • 關(guān)系代數(shù)有關(guān)符號,大家可能又不熟悉了,點擊跳轉(zhuǎn):(數(shù)據(jù)庫系統(tǒng)概論|王珊)第二章關(guān)系數(shù)據(jù)庫-第四節(jié):關(guān)系代數(shù)

文章目錄

  • 一:關(guān)系代數(shù)表達式等價變換規(guī)則
    • (1)連接、笛卡爾積、并、交的交換律
    • (2)連接、笛卡爾積、并、交的結(jié)合律
    • (3)投影的串接定律
    • (4)選擇的串接定律
    • (5)選擇與投影的交換律
    • (6)選擇與笛卡爾積的交換律
    • (7)選擇與并的分配律
    • (8)選擇與差運算的分配律
    • (9)選擇對自然連接的分配律
    • (10)投影與笛卡爾積的分配律
    • (11)投影與并的分配律
  • 二:查詢樹的啟發(fā)式優(yōu)化
    • (1)典型的啟發(fā)式規(guī)則
    • (2)實現(xiàn)算法
    • (3)實例演示

在(數(shù)據(jù)庫系統(tǒng)概論|王珊)第九章關(guān)系查詢處理和關(guān)系優(yōu)化-第一節(jié):查詢處理中講到過:SQL語句經(jīng)過查詢分析,查詢檢查后變換為查詢樹,它是關(guān)系代數(shù)表達式的內(nèi)部表示。本節(jié)介紹查詢優(yōu)化之代數(shù)優(yōu)化,它是基于關(guān)系代數(shù)等價變換規(guī)則的優(yōu)化方法

  • 兩個關(guān)系表達式R1R_{1}R1?R2R_{2}R2?是等價的,可以記為R1≡R2R_{1} \equiv R_{2}R1?R2?

一:關(guān)系代數(shù)表達式等價變換規(guī)則

  • 為了能方便閱讀,就沒用截圖。手都麻了🤮(動動手點個贊吧🥳)

(1)連接、笛卡爾積、并、交的交換律

笛卡爾積

R×S≡S×RR×S \equiv S×RR×SS×R


R∪S≡S∪RR \cup S \equiv S \cup RRSSR

R∩S≡S∩RR \cap S \equiv S \cap RRSSR

連接

R?FS≡S?FR、R?S≡S?RR \underset{F}{\bowtie} S \equiv S \underset{F}{\bowtie} R 、 R\bowtie S \equiv S\bowtie RRF??SSF??RR?SS?R

(2)連接、笛卡爾積、并、交的結(jié)合律

笛卡爾積

(R×S)×T≡R×(S×T)(R×S) ×T\equiv R×(S×T)(R×S)×TR×(S×T)


(R∪S)∪T≡R∪(S∪T)(R \cup S)\cup T \equiv R \cup (S\cup T)(RS)TR(ST)

(R∩S)∩T≡R∩(S∩T)(R \cap S)\cap T \equiv R \cap (S\cap T)(RS)TR(ST)

連接

(R?FS)?FT≡R?F(S?FT)(R \underset{F}{\bowtie} S) \underset{F}{\bowtie} T \equiv R \underset{F}{\bowtie} (S \underset{F}{\bowtie} T) (RF??S)F??TRF??(SF??T)
(R?S)?T≡R?(S?T)(R\bowtie S) \bowtie T \equiv R\bowtie (S \bowtie T)(R?S)?TR?(S?T)

(3)投影的串接定律

關(guān)系的兩次投影操作可以合并為一次完成(反過來就是分解)

ΠA1,A2,...,An(ΠB1,B2,...,Bm(E))≡ΠA1,A2,...,An(E)\Pi_{A_{1},A_{2},...,A_{n}}(\Pi_{B_{1},B_{2},...,B_{m}}(E)) \equiv \Pi_{A_{1},A_{2},...,A_{n}}(E)ΠA1?,A2?,...,An??(ΠB1?,B2?,...,Bm??(E))ΠA1?,A2?,...,An??(E)

  • EEE是關(guān)系代數(shù)表達式
  • Ai(i=1,2,..,n),Bj(j=1,2,..,m)A_{i}(i=1,2,..,n),B_{j}(j=1,2,..,m)Ai?(i=1,2,..,n)Bj?(j=1,2,..,m)是屬性名。并且{A1,A2,...,An}\{ {A_{1},A_{2},...,A_{n}} \}{A1?,A2?,...,An?}構(gòu)成{B1,B2,...,Bm}\{ {B_{1},B_{2},...,B_{m}} \}{B1?,B2?,...,Bm?}的子集

(4)選擇的串接定律

選擇的兩次投影操作可以合并為一次完成(反過來就是分解)

σF1(σF2(E))≡σF1∧F2(E)\sigma_{F1}(\sigma_{F2}(E)) \equiv \sigma_{F1\land F2}(E)σF1?(σF2?(E))σF1F2?(E)

(5)選擇與投影的交換律

σF(ΠA1,A2,...,An(E))≡ΠA1,A2,...,An(σF(E))\sigma_{F}(\Pi_{A_{1},A_{2},...,A_{n}}(E)) \equiv \Pi_{A_{1},A_{2},...,A_{n}}(\sigma_{F}(E))σF?(ΠA1?,A2?,...,An??(E))ΠA1?,A2?,...,An??(σF?(E))

  • 假設(shè):選擇條件FFF只涉及屬性A1,A2,...,An{A_{1},A_{2},...,A_{n}}A1?,A2?,...,An?

ΠA1,A2,...,An(σF(E))≡ΠA1,A2,...,An(σF(ΠA1,A2,...,An,B1,B2,...,Bm(E)))\Pi_{A_{1},A_{2},...,A_{n}}(\sigma_{F}(E)) \equiv \Pi_{A_{1},A_{2},...,A_{n}}(\sigma_{F}( \Pi_{A_{1},A_{2},...,A_{n},B_{1},B_{2},...,B_{m}}(E)))ΠA1?,A2?,...,An??(σF?(E))ΠA1?,A2?,...,An??(σF?(ΠA1?,A2?,...,An?,B1?,B2?,...,Bm??(E)))

  • 假設(shè)FFF中有不屬于A1,A2,...,An{A_{1},A_{2},...,A_{n}}A1?,A2?,...,An?的屬性B1,B2,...,Bm{B_{1},B_{2},...,B_{m}}B1?,B2?,...,Bm?

(6)選擇與笛卡爾積的交換律

對于σF(E1×E2)\sigma_{F}(E_{1}×E_{2})σF?(E1?×E2?),有如下等價

σF(E1×E2)≡σF(E1)×E2\sigma_{F}(E_{1}×E_{2}) \equiv \sigma_{F}(E_{1})×E_{2}σF?(E1?×E2?)σF?(E1?)×E2?

  • 假設(shè)選擇條件只與其中的一個關(guān)系有關(guān),應(yīng)該對那個關(guān)系先做選擇,然后再做笛卡爾積。例如上面FFF中涉及的屬性都是E1E_{1}E1?中的屬性

σF(E1×E2)≡σF1(E1)×σF2(E2)\sigma_{F}(E_{1}×E_{2}) \equiv \sigma_{F_{1}}(E_{1})×\sigma_{F_{2}}(E_{2})σF?(E1?×E2?)σF1??(E1?)×σF2??(E2?)

  • 假設(shè)選擇條件與兩個關(guān)系都有關(guān),應(yīng)該先分別做選擇,然后再做笛卡爾積。例如上面F=F1∧F2F=F_{1} \land F_{2}F=F1?F2?,并且F1F_{1}F1?中只涉及E1E_{1}E1?中的屬性,F2F_{2}F2?中只涉及E2E_{2}E2?中的屬性

σF(E1×E2)≡σF2(σF1(E1)×E2)\sigma_{F}(E_{1}×E_{2}) \equiv \sigma_{F_{2}}(\sigma_{F_{1}}(E_{1})×E_{2})σF?(E1?×E2?)σF2??(σF1??(E1?)×E2?)

  • 假設(shè):如果選擇條件與某一部分關(guān)系有關(guān),那么也應(yīng)該先對那個關(guān)系做部分選擇,然后做笛卡爾積,最后做選擇。例如上面F=F1∧F2F=F_{1} \land F_{2}F=F1?F2?,并且F1F_{1}F1?中只涉及E1E_{1}E1?中的屬性,F2F_{2}F2?中涉及E1E_{1}E1?E2E_{2}E2?中的屬性

(7)選擇與并的分配律

σ(E1∪E2)≡σF(E1)∪σF(E2)\sigma(E_{1} \cup E_{2}) \equiv \sigma_{F}(E_{1}) \cup \sigma_{F}(E_{2})σ(E1?E2?)σF?(E1?)σF?(E2?)

  • 假設(shè)E=E1∪E2E=E_{1} \cup E_{2}E=E1?E2?E1E_{1}E1?E2E_{2}E2?有相同的屬性名

(8)選擇與差運算的分配律

σ(E1?E2)≡σF(E1)?σF(E2)\sigma(E_{1} - E_{2}) \equiv \sigma_{F}(E_{1}) - \sigma_{F}(E_{2})σ(E1??E2?)σF?(E1?)?σF?(E2?)

(9)選擇對自然連接的分配律

σF(E1?E2)≡σF(E1)?σF(E2)\sigma_{F}(E_{1} \bowtie E_{2}) \equiv \sigma_{F}(E_{1}) \bowtie \sigma_{F}(E_{2})σF?(E1??E2?)σF?(E1?)?σF?(E2?)

  • FFF只涉及E1E_{1}E1?E2E_{2}E2?公共屬性

(10)投影與笛卡爾積的分配律

ΠA1,A2,...,An,B1,B2,...,Bm(E1×E2)≡ΠA1,A2,...,An(E1)×ΠB1,B2,...,Bm(E2)\Pi_{A_{1},A_{2},...,A_{n},B_{1},B_{2},...,B_{m}}(E_{1}×E_{2}) \equiv \Pi_{A_{1},A_{2},...,A_{n}}(E_{1}) × \Pi_{B_{1},B_{2},...,B_{m}}(E_{2})ΠA1?,A2?,...,An?,B1?,B2?,...,Bm??(E1?×E2?)ΠA1?,A2?,...,An??(E1?)×ΠB1?,B2?,...,Bm??(E2?)

  • A1,A2,...,AnA_{1},A_{2},...,A_{n}A1?,A2?,...,An?E1E_{1}E1?的屬性
  • B1,B2,...,BmB_{1},B_{2},...,B_{m}B1?,B2?,...,Bm?E2E_{2}E2?的屬性

(11)投影與并的分配律

ΠA1,A2,...,An(E1∪E2)≡ΠA1,A2,...,An(E1)∪ΠA1,A2,...,An(E2)\Pi_{A_{1},A_{2},...,A_{n}}(E_{1} \cup E_{2}) \equiv \Pi_{A_{1},A_{2},...,A_{n}}(E_{1}) \cup \Pi_{A_{1},A_{2},...,A_{n}}(E_{2})ΠA1?,A2?,...,An??(E1?E2?)ΠA1?,A2?,...,An??(E1?)ΠA1?,A2?,...,An??(E2?)

二:查詢樹的啟發(fā)式優(yōu)化

  • 這是對關(guān)系代數(shù)表示的查詢樹進行優(yōu)化的方法

(1)典型的啟發(fā)式規(guī)則

典型的啟發(fā)式規(guī)則

  • 【規(guī)則1】選擇運算應(yīng)盡可能先做:這是為了減少中間結(jié)果的規(guī)模
  • 【規(guī)則2】投影和選擇運算同時進行:這是為了避免重復(fù)掃描
  • 【規(guī)則3】將投影運算與其前后的雙目運算結(jié)合起來:這是為了避免重復(fù)掃描
  • 【規(guī)則4】把某些選擇運算和其前面的笛卡爾積結(jié)合起來成為一個連接運算:這是為了減少中間結(jié)果的規(guī)模
  • 【規(guī)則5】提取公共子表達式(公因子):這是為了保存計算結(jié)果,避免重復(fù)計算

(2)實現(xiàn)算法

  • 該算在遵循啟發(fā)式規(guī)則,并應(yīng)用關(guān)系代數(shù)表達式等價變換規(guī)則來優(yōu)化關(guān)系表達式
  • 該算法的輸入和輸出都是查詢樹(分別對應(yīng)待優(yōu)化和優(yōu)化的關(guān)系表達式)

算法步驟

  • 【步驟1】分解選擇運算:這是為了便于不同的選擇運算沿樹的不同分枝向樹葉移動,一直移動到與這個選擇條件相關(guān)的關(guān)系處,使選擇盡可能先做σF1∧F2∧...∧Fn(E)?σF1(σF2(...(σFn(E))...))\sigma_{F_{1} \land F_{2} \land ... \land F_{n}} (E)\Rightarrow \sigma_{F_{1}}(\sigma_{F_{2}}(...(\sigma_{F_{n}}(E))...))σF1?F2?...Fn??(E)?σF1??(σF2??(...(σFn??(E))...))
  • 【步驟2】通過交換選擇運算,將每個選擇運算盡可能移動到葉端:利用規(guī)則4~9盡可能把選擇移動到樹的葉端
  • 【步驟3】通過交換投影運算,將每個投影運算盡可能移動到葉端:利用規(guī)則3、11、10、5盡可能把投影移動到樹的葉端
  • 【步驟4】合并選擇和投影的串接:利用規(guī)則3~5把選擇和投影的串接合并成單個選擇、單個投影或一個選擇后面跟一個投影。這是為了使多個選擇或投影能同時進行,或在一次掃描中全部完成
  • 【步驟5】對內(nèi)結(jié)點分組:每一雙目運算×××?\bowtie?∪\cup?-?)和它所有的直接祖先的一元運算結(jié)點σ\sigmaσΠ\PiΠ)分為一組(如果其后代直到葉子全是單目運算,則也將他們并入該組);注意當(dāng)雙目運算是笛卡爾積×××),而且其后的選擇不能與它結(jié)合為等值連接時,則不能將選擇與這個×××并為一組

(3)實例演示

  • 注意這是一個很重要的考點

【例】如下給出了一個SQL語句

SELECT Student.Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Sno='2';

將SQL語句轉(zhuǎn)為關(guān)系代數(shù)表達式

  • 先對Student和SC做笛卡爾積
  • 再對中間結(jié)果做選擇(條件為 Student.Sno=SC.Sno)
  • 再對中間結(jié)果做選擇(條件為SC.Sno='2')
  • 最后投影

結(jié)果為

ΠSname(σStudent.Sno=sc.Cno∧sc.cno=2(student×sc))\Pi_{Sname}(\sigma_{Student.Sno=sc.Cno \land sc.cno=2}(student × sc))ΠSname?(σStudent.Sno=sc.Cnosc.cno=2?(student×sc))

將關(guān)系代數(shù)表達式轉(zhuǎn)為查詢樹

查詢樹優(yōu)化

首先選擇條件盡可能下移

  • SC.Sno='2'只和SC有關(guān),所以它會沿著分支恰當(dāng)?shù)姆种乱频絊C的上方
  • Student.Sno=SC.Sno同時涉及Student和SC,所以只能待在那里

②:把選擇和其之前的笛卡爾積合并為等值連接,或者干脆變?yōu)樽匀贿B接


【例】查詢選修了數(shù)據(jù)庫課程的女生學(xué)號與姓名,如下是SQL語句

SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Cname='datebase' AND Ssex='女';

將SQL語句轉(zhuǎn)為關(guān)系代數(shù)表達式

ΠSno,Sname(σCname=′數(shù)據(jù)庫′∧Ssex=′女′(SC?Course?Student))\Pi_{Sno,Sname}(\sigma_{Cname='數(shù)據(jù)庫' \land Ssex='女'}(SC \bowtie Course \bowtie Student))ΠSno,Sname?(σCname=數(shù)據(jù)Ssex=?(SC?Course?Student))

將關(guān)系代數(shù)表達式轉(zhuǎn)為查詢樹

查詢樹優(yōu)化

①:選擇條件復(fù)雜,先分解選擇條件


②:將選擇運算盡可能移動到樹的葉端


③:涉及了投影運算,所以也把它盡可能移動到樹的葉端

  • 投影運算下移時要保留連接屬性


④:對內(nèi)結(jié)點進行分組

總結(jié)

以上是生活随笔為你收集整理的(数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。