B:佔用的塊數;Br,Bs分別代表R,S佔用的塊數;
Frs,Mrs分別是連接選擇率,存放連接結果因子表示每塊可存放的結果元組數
2、假設關係R(A,B)]和S(B,C,D)情況如下:R有20000個元組,S有1200個元組,一個塊能裝40個R的元組,能裝30個S的元組,估算下列操作需要多少次磁盤塊讀寫。
(1)R上沒有索引,
select * from R;
只在R上查詢時:20000/40=500(塊);
(2)R中A爲主碼,A有三層B+樹索引,
B+樹圖文詳解,這篇文章將B+樹用戶簡單易懂的方式解釋,利於更好的複習B+樹的相關知識。
select * from R where A=10;
選擇條件是“碼=值”,採用該表主索引,如果是B+樹,層數爲L,需要存取B+樹中從根結點到葉結點L塊,加上基本表中該元組所在的一塊,cost=L+1
3+1=4(塊)
(3)嵌套循環連接;
一個塊可以裝40個R的元組,30個S的元組,但是不知道在內存中分別要存放多少塊的R元組和多少塊的S元組。只知道外層循環讀多少遍,不知道內層循環,所以無法進行估算。
(4)排序合併連接,區分R與S在B屬性上已經有序和無序兩種情況。
有序:由於表已經有序了,R和S 都只需要掃描一遍即可。20000/40+1200/30=540.
無序:需要提前將表排序,所以執行時間需要加上對兩個表的排序時間。
540+(2*540)+(2 * 540 * )
3、對學生-課程數據庫,查詢信息系學生選修了的所有課程名稱。
SELECT Cname
FROM Student,Course,SC
WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Student.Sdept='IS';
試畫出用關係代數表示的語法樹,並用關係代數表達式優化算法對原始的語法樹進行優化處理,畫出優化後的標準語法樹。
語法樹:
關係代數語法樹:
優化後的關係代數語法樹:
4、對於下面的數據庫模式:
Teacher(,Tname,Tage,Tsex);
Department(,Dname,Tno);
Work(,Dno,Year,Salary);
假設Teacher的Tno屬性,Department的Dno屬性以及Work的Year屬性上有B+樹索引,說明下列查詢語句的一種較優的處理方法。
(1)
select * from Teacher where Tsex='女';
在Tsex上沒有索引,採用全表掃描方法。
(2)
select * from Department where Dno<301;
B+樹索引。
(3)
select * from Work where Year<>2000;
<>操作法表示的是不等於,與!=等效。
B+樹索引。按照條件查找,則會有大塊數據 滿足或不滿足條件,就可以不用在判別了,直接輸出。
(4)
select * from Work where Year>2000 and Salary<5000;
B+樹索引。按照Year索引後,再判斷Salary是否滿足條件。
(5)
select * from Work where Year<2000 or Salary<5000;
全表掃描方法。
Salary上沒有索引,只能全表掃描。
5、對於題4 的數據庫模式有如下查詢:
select Tname
from Teacher,Department,Work
where Teacher.Tno=Work.Tno and Department .Dno=Work.Dno and Department.Dname='計算機系' and Salary>5000.
畫出語法樹以及用關係代數表示的語法樹,並對關係代數語法樹進行優化,畫出優化後的語法樹。
語法樹:
關係代數表示的語法樹:
優化後的關係代數語法樹:
B+樹的特徵:
1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。
2.所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
B+樹的優勢:
1.單一節點存儲更多的元素,使得查詢的IO次數更少。
2.所有查詢都要查找到葉子節點,查詢性能穩定。
3.所有葉子節點形成有序鏈表,便於範圍查詢。
這次做題複習了一下以前B+樹的相關知識,要是不復習的話,都快忘光了!