6 1資料庫查詢處理與優化

2021-07-14 05:26:12 字數 3468 閱讀 3201

tags:資料庫

查詢處理是關聯式資料庫管理系統執行查詢語句的過程,其任務是把使用者提交給關聯式資料庫管理系統的查詢語句轉換為高效的查詢執行計畫

sql詞法分析和語法分析
詞法分析是將語句中的單詞流識別出來,比如create table student 詞法分析是分析出 這句的單詞流是 「create」 「table」 「identifier」(前提是你給它們編號 比如用巨集或者列舉),然後語法分析 是通過單詞流 判斷 非邏輯錯誤 比如 有不能識別的符號 create table後面不是標示符等等 語義分析是分析語句的邏輯關係 比如字段長度越界什麼的如 vchar(2)你賦值為「啊啊啊啊啊啊」這種錯誤的識別是語義分析階段完成的

sql語義檢查
根據資料字典中有關的模式定義檢查語句中的資料物件,如關係名,屬性名是否存在和有效.如果是對檢視的操作,則要用檢視消解的方法把對檢視的操作轉換為對基本表的操作,還要根據資料字典中的使用者許可權和完整性約束對使用者的訪問許可權進行檢查.注意此時的檢查是初步的,靜態的檢查!

查詢處理可以分為四個階段:查詢分析,查詢檢查,查詢優化,查詢執行

查詢分析,首先對查詢語句進行掃瞄,詞法分析和語法分析.

查詢檢查,對合法的查詢語句進行語義檢查,檢查通過後便把sql查詢語句轉換成內部表示,即等價的關係代數表示式

查詢優化,每個查詢都會有許多可供選擇的執行策略和操作演算法,查詢優化就是選擇乙個高效執行的查詢處理策略.

查詢執行,根據查詢優化器得到的執行策略生成查詢執行計畫,由**生成器執行這個查詢計畫的**,然後加以執行,送回查詢結果.

選擇操作的實現

select * from student where

《條件表示式》

全表掃瞄演算法,按照物理次序讀student的m塊到記憶體,檢查記憶體的每個元組t,如果t滿足選擇條件,則輸出t,如果student還有其他塊未被處理,重複上述步驟.

索引掃瞄演算法,如果選擇條件中的屬性上有索引,則可以用索引掃瞄方法通過索引先找到滿足條件的元組指標,再通過元組指標在查詢的基本表中找到元組.

一般情況下,當選擇率較低時,基於索引的選擇演算法要優於全表掃瞄演算法,但是在某些情況下,例如選擇率較高,或者要查詢原則均勻分布在查詢的表中,這時基於索引的選擇演算法效能不如全表掃瞄演算法.

連線操作實現
select * from student,sc 

where student.sno = sc.sno

迴圈巢狀演算法,對外層迴圈student表的每乙個元組,檢索內層迴圈sc表中的每乙個元組.滿足條件則輸出.

排序-合併演算法,是等值連線的常用演算法,尤其適合參與連線的諸個表已經排好序的情況.

索引連線演算法,在sc表上已經建立了屬性sno

的索引,對student中每乙個元組,由sno值通過sc的索引找到對應的sc元組,再把sc和student元組連線起來.

hash join演算法,hash join演算法把連線屬性作為hash碼,用同乙個雜湊函式把student表和sc表同時雜湊到雜湊表中.分為兩個階段,第一階段,為劃分階段,對包含元組較少的表進行一遍處理,把它的元組按照hash函式雜湊到hash桶中,第二部為試探階段,即連線階段,對另乙個表進行一遍處理,元組較多的表按照同乙個hash函式進行雜湊,找到適當的hash桶.

優化器可以從資料字典中獲取許多統計資訊,例如關係中的元組數,關係中每個屬性值的分布情況,索引等.優化器可以根據這些資訊做出估算,選擇更加高效的查詢計畫.

如果資料庫的物理統計資訊改變了,系統可以自動對查詢進行重新優化以選擇相適應的執行計畫.

優化器可以考慮數百種不同查詢計畫,而程式設計師一般只能考慮幾種.

優化器中包括了很多複雜的優化技術,這些技術往往只有最好的程式設計師才能掌握,系統的自動優化相當於使得所有人都擁有這些優化技術.

查詢優化的總目標是選擇最有效的策略,求的給定關係表示式的值,使得查詢代價最小,因為查詢優化的搜尋空間有時非常大,實際系統選擇的策略不一定是最優的,而是較優的.

sql語句經過查詢分析,查詢檢查後變化為查詢樹,它是關係代數表示式的內部表示.

關係代數等價變換
代數優化策略就是通過對關係代數表示式的等價變換來提高查詢效率的.

查詢樹的啟發式優化
典型的啟發式規則有:

1. 選擇運算盡可能先做.減少中間結果大小.

2. 把投影運算的選擇運算同時進行,如果有若干投影和選擇運算,並且它們都對同乙個關係操作,則可以在掃瞄此關係的同時完成所有這些運算以避免重複掃瞄.

3. 把投影同其前或者其後的雙目運算結合起來,沒有必要為了去掉某些欄位而才重新掃瞄一遍關係.

4. 把某些選擇同在它前面要執行的笛卡爾積結合起來成為乙個連線運算,連線運算要筆同樣關係上的笛卡爾積接生很多時間.

5. 找出公共子表示式.

物理優化就是要選擇高效合理的操作演算法或訪問路徑,求的優化的查詢計畫,達到查詢優化的目標.

選擇的方法
基於規則的啟發式優化.

基於代價估算的優化.

量著結合的優化方法.

基於啟發式規則的訪問路徑優化

選擇操作的啟發式規則

對於選擇條件是」主碼=值」的查詢,查詢結果最多是乙個元組,可以選擇主碼索引.

對於選擇條件是」非主屬性=值」的查詢,並且選擇列上有索引,則要估算結果元組的數目,如果比較小<1/10可以使用索引掃瞄,否則全表掃瞄.

對於屬性上的非等值查詢或者範圍查詢,如果選擇列上有索引,同樣要估算數目,決定使用索引掃瞄還是全表掃瞄.

對於用and連線的合取選擇條件,如果有組合索引則使用組合索引,如果某些屬性上有一般索引,則可以使用索引掃瞄,否則使用全表掃瞄.

對於or條件,一般使用全表掃瞄.

連線操作啟發式規則
如果兩個表都已經按照連線屬性排序,則選用排序-合併演算法.

如果乙個表在連線屬性上有索引,則可以使用索引連線演算法.

如果上面兩個都不適用可以使用hash join演算法

使用迴圈巢狀演算法.

基於代價估算的優化
資料字典中儲存了優化器需要的統計資訊,主要包括以下三個方面:

1. 對於每個基本表,該錶的元組總數,元組長度,佔的塊數,占用的溢位塊數;

2. 對於基本表的每個列,該列不同值的個數,該列最大值,最小值,該列上是否有索引,何種索引.

3. 對於索引,例如b+樹索引,該索引的層數,不同索引值的個數,索引的選擇基數,索引的葉節點數.

《資料庫系統概論》 9 查詢處理與查詢優化

查詢分析 對查詢語句進行掃瞄 詞法分析和語法分析。查詢檢查 對合法的查詢語句進行語義檢查,安全性和初步完整性檢查 查詢優化 選擇乙個高效執行的查詢處理策略。按照優化的層次可將查詢優化分為代數優化和物理優化 查詢執行 依據優化器得到的執行策略,由 生成器生成執行這個查詢計畫的 然後加以執行,回送查詢結...

資料庫查詢優化

方法 1 1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。步驟閱讀 22.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is...

資料庫查詢優化

本記載,用於保留面對大資料量時,查詢速率待優化,只記錄要點,具體如何操作,還需查詢 1 索引優化 通過建立合理高效的索引,提高查詢的速度.2 sql優化 根據需求,組織優化sql語句,使查詢效率達到最優,在很多情況下要考慮索引的作用 3 水平拆分 如果表的資料量增長特變塊,索引帶來的效能優化可能達到...