習題題庫 [第十一章:進階的查詢處理與最佳化]
習題11-1

本章第一節描述巢狀迴圈法 (JNL) 的運作方式時,是假設資料庫系統的主記憶體很小,處理 Result = RR.A=S.BS 時,只能容納一個外部迴圈R 的資料頁,一個內部迴圈S 的資料頁,和一個Result 的資料頁。假設今天主記憶體裡可容納較多的資料頁,其中K 個資料頁給R,一個資料頁給S,和一個資料頁給Result,
1. 請描述該如何修改 (JNL) 演算法,並列出其演算法的虛擬碼。
2. 成本為何?

 
習題11-2
考慮使用巢狀迴圈法 (JNL) 來處理Result = ProductProduct.pNo = Record.pNo Record,其中 bProduct = 5000,bRecord = 3000,且Record 是當作外部迴圈。假設目前主記憶體裡共有6 個資料頁可供利用,其中一個給Result。請問以下每一種分配方式,其查詢處理成本為何?
1. 4 個資料頁給資料表 Product,1 個資料頁給資料表 Record。
2. 3 個資料頁給資料表 Product,2 個資料頁給資料表 Record。
3. 1 個資料頁給資料表 Product,4 個資料頁給資料表 Record。
 
習題11-3
本章第一節描述巢狀迴圈法 (JNL) 的運作方式時,是假設資料庫系統的主記憶體很小,處理 Result = RR.A = S.B S 時,只能容納一個外部迴圈R 的資料頁,一個內部迴圈S 的資料頁,和一個Result 的資料頁。假設主記憶體裡可容納多餘的 K-1個資料頁,請問
1. 若這 K-1 個資料頁全數給 R (即R 在主記憶體裡可有K個資料頁),請問巢狀迴圈法的成本為何?
2. 若這 K-1 個資料頁全數給 S (即S 在主記憶體裡可有K個資料頁),請問巢狀迴圈法的成本為何?
3. 這些多餘的主記憶體資料頁應該給 R、S 或Result 比較划算?
4. 請按照成本最低的方式修改 (JNL) 的演算法。
 
習題11-4
請描述如何用巢狀迴圈法 (JNL)、索引迴圈法 (JIL) 和排序合併法 (JSM) 來處理 LEFT OUTER JOIN (Result = RA = BS)。並列出其演算法的虛擬碼。
 
習題11-5
考慮以下的查詢句:
SELECT DISTINCT name
FROM Author;
假設資料字典裡存了以下的資訊:
rAuthor = 200000,bAuthor = 2000,且一個硬碟頁可以容納 200 個 Author.name 欄位值,
1. 描述PLS 的處理方式。
2. 假設排序n 個資料頁要存取2nlog2n 的硬碟頁,請計算利用PLS 來處理以上查詢句的成本。
 
習題11-6
請用排序法來處理 R∪S,並寫出其演算法虛擬碼。
 
習題11-7

考慮以下的關聯代數式:
mIdBrowse)∪( πtransMidTransaction)
假設 rBrowse = 200,000,bBrowse = 20,000,rTransaction = 90,000,bTransaction = 3,000,且Browse.mId 和 Transaction.transMid 上各有一個索引。xmId = 4,bI1mId = 1,000,xtransMid = 3,bI1transMid = 500。
1. 請說明如何利用索引結構來處理以上查詢句,成本為何?
2. 如果 Browse.mId 和 Transaction.transMid 上沒有建置索引,請估算出排序法 (IS)處理此關聯代數式的成本。假設將 mId 欄位值從資料表 Browse 取出後佔bBrowse.mId = 500 個硬碟頁,將transMid 欄位值從資料表Transaction 取出後佔bTransaction.transMid = 250 個硬碟頁。

 
習題11-8
若採用彙總索引結構搜尋 (AI) 的方式來處理 AVERAGE、COUNT、SUM、MAX 和MIN,請問哪些彙總函數的計算需要造訪所有葉節點,哪些則只需造訪一個葉節點?
 
習題11-9
考慮圖 10-4 處理 Q2 的查詢樹,假設你想用索引迴圈法 (JIL) 來處理JOIN,請問如何順便處理 SELECT 和 PROJECT,以有效率的得到正確的查詢結果?
 
習題11-10
考慮以下的查詢句:
SELECT *
FROM Product, Record
WHERE Product.pNo=Record.pNo AND unitPrice > 300
AND amount > 1;
且 rProduct = 100,000,bProduct = 5,000,xunitPrice = 3,bI1unitPrice = 1,000,rRecord = 90,000,bRecord = 3,000。其中unitPrice 欄位為資料表Product 的群聚索引,此外,在資料表Record 裡,假設滿足 amount > 1 的記錄佔全部記錄的1/3。
1. 先利用 Product 的群聚索引 unitPrice 找出 unitPrice > 300 的第一個資料頁指標,接著利用巢狀迴圈法 (JNL) 來處理此查詢句,其中外部迴圈為unitPrice> 300 的 Product 資料頁,而內部迴圈為Record 資料頁,但只比對 amount > 1的 Record 記錄,請估算其成本。
2. 先利用 Product 的群聚索引 unitPrice 找出滿足 unitPrice > 300 的第一個資料頁指標,然後,接著利用循序搜尋找出滿足 amount > 1 的 Record 記錄並將之寫入暫時資料表 LargeRec,接著利用巢狀迴圈法 (JNL) 來處理此查詢,其中外部迴圈為滿足 unitPrice > 300 的 Product 資料頁,而內部迴圈為 LargeRec資料頁,請估算其成本。
3. 以上哪一種方式的成本較低?