2、
(1)全表掃描算法代價估算:20000/40=500塊
(2)選擇條件是“碼=值”,採用該表主索引,如果是B+樹,層數爲L
需要存取B+樹中從根結點到葉結點L塊,加上基本表中該元組所在的一塊,總供需要:L+1
3+1=4塊
B+樹的具體複習參考了以下文章:
(3)嵌套循環連接算法代價估算:
容M,N分別代表R,S佔用的塊數
總共需要塊數爲:M+M*N/(K-1)
連接操作使用的內存緩衝區塊數爲K,分配K-1給外表,本題中沒有給出K
故最終結果爲:500+500x40/(K-1)
(4)排序-合併連接算法代價估算:
排序好:R和S只讀取一遍,20000/40+1200/30=540
未排序:則加上排序代價,對於包含540個塊的文件排序的代價大約是2×540+2×540×(log以2爲底540的對數)
(1)最優策略:全表掃描
(2)最優策略:全表掃描
(3)最優策略:全表掃描
(4)最優策略:利用Year屬性的B+樹索引
(5)最優策略:全表掃描
優化後:
總結:這一部分感覺難度不是很大,主要有些問題可能在於優化查詢書這一部分,老有一種飄飄的感覺,不像是做計算題1+1=2,這種都是很確定,但在優化的過程中很怕自己的想法會和答案優化規則有出入。所以下面再強調一下優化規則吧:
1.選擇運算應儘可能先做。在優化策略中這是最重要、最基本的一條
2.把投影運算和選擇運算同時進行(如有若干投影和選擇運算,並且它們都對同一個關係操作,則可以在掃描此關係的同時完成所有的這些運算以避免重複掃描關係)
3.把投影同其前或其後的雙目運算結合起來
4.把某些選擇同在它前面要執行的笛卡爾積結合起來成爲一個連接運算
5.找出公共子表達式