數據庫學習的一天(10)

第十九講 查詢實現算法

1.過程:sql->關係模式的運算的各種組合->DBMS的解釋與調用

2.三大類操作:

3.各類參數:

4.連接操作的實現算法:①-④表空間掃描法

①最笨的:逐個塊存入,然後進行連接,每次在內存裏的只有三個塊  基本實現方法

②稍微聰明的:將兩個關係完全放進內存裏,然後再做連接    全主存

③稍微聰明的:將其中一個放得下的關係完全放進內存裏,另一個關係逐塊放入,再做連接

④無可奈何的:將其中一個關係都拆分成最大能放進的子集,即M-2,然後另一個關係逐個存入,結束再下一個子集

5.迭代器算法:用於解決單一元組的一元操作

分爲open函數,GetNext函數,close函數,而且上層的迭代器可以調用下層的迭代器

6.一趟掃描算法:

7.連接操作的優化:

 

講條件轉化爲散列值的匹配

8.基於索引的選擇算法:

由於索引文件位於內存,比較其磁盤的存取時間,內存的訪問時間簡直可以忽略不計,

分析:當有聚簇的情況下,需要搜索的塊數,用記錄數/塊的容量即可,當有索引的時候,就不用了將整條記錄放入內存,根據索引找到相應的記錄,再存入內存,所以時間上只要算條件合適的記錄數、

錯題分析:

分析:能一趟實現的只有包的並操作,無腦的掃描並且輸出即可

分析:open之後獲得一個r,調用getnext會掃描s,若有相同則輸出,當沒有換一個,再重新搜索s

分析:A。要求M必須大於非重複元組所佔的磁盤塊數,才能執行   B.散列和排序皆可以滿足快速比較,使用方法hash,二分

c。hash之後只會對應一個內存塊,僅跟它比較即可  D.一邊掃描一邊建立即可

分析:本題爲尋找不正確的:A。分組必然要全部放在內存裏,正確,  B.排序和散列都是爲了方便比較  c。進行hash後只需跟少數的內存塊計算  D.分組聚集應當在開始之前就建立好數據結構

第二十講

1.多趟掃描:由於有些時候,需要操作的元組數目過大,所以需要通過排序或者散列或者索引先處理一部分塊,然後存進磁盤,然後再將處理好的子表逐個塊拿出來,操作

2.多路歸併算法:

如果總的元組個數的超過了內存的平方,那麼我們需要多趟歸併

3.關於包和集合的∪,∩,差操作:

集合並:則是需要去重,需要在比較的時候,順便去除重複的部分

包並:全部排序後,直接輸出即可

集合交:需要去重,在兩個集合中都有出現,則又一次

包交:則是兩個包中出現次數的最小值

集合差:即R中元組在R,S中同時出現,則不會出現

包差:即元組在R中出現的次數-S中出現的次數

4.基於散列:

也是差不多的邏輯,先通過一個散列函數將將所有的元組分成M個集合,那麼會出現匹配的就會在各自的集合中,在選用另一種散列函數對集合中的元素進行處理,然後實現去重,分組,並,交,差

錯題分析:

分析:如何才能獲得最優的歸併操作呢?其實內存有100塊,那麼我們歸併,就希望有99個集合,那麼10000塊能分成100個集合,然後將其中兩個歸併成一個,再用這個和餘下的98個

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章