習題題庫 [第十章:基本的查詢處理與最佳化]
習題10-1

假設你想找出「黃三益」曾經放到購物車且定價超過500 元的相關商品資訊,所以你下達以下SQL 查詢句:
SELECT pId, name, pName, unitPrice
FROM Product, Order, Member
WHERE Product.unitPrice > 500 AND Product.pNo = Order.pNo AND Order.mId = Member.mId AND name = ‘黃三益’;
請畫出該查詢句的初始查詢樹,並按本章所提的經驗法則一步一步轉換至較佳的查詢樹。

 
習題10-2
假設你想找出所有購買過「系統分析理論與實務」且在1970 年以後出生的會員之會員編號和會員姓名,所以你下達以下SQL 查詢句:
SELECT mId, name
FROM Member, Transaction, Record, Product
WHERE birthday >= to_date (‘19700101’, ‘yyyymmdd’)
AND transMid = mId AND Record.tNo = Transaction.tNo
AND Product.pNo = Record.pNo AND pName = ‘系統分析理論與實務’;
請畫出該查詢句的初始查詢樹,並按本章所提的經驗法則一步一步轉換至較佳的查詢樹。
 
習題10-3
假設你有一個複合索引 (unitPrice, catalog),請描述如何利用它來處理 σcatalog =‘Book’ AND unitPrice > 500 Product。
 
習題10-4
考慮以下的運算式:
σamount >2 AND salePrice > 1000 Record
假設資料字典裡存了以下的資訊:
rRecord = 200,000, bRecord = 40,000, xsalePrice = 3, bI1salePrice = 1,000,
xamount,salePrice = 4, bI1amount,salePrice = 5,000。
其中 salePrice 欄位設為群聚索引,而 (amount, salePrice) 為非群聚索引。
考慮 (SL)、(SSI) 和 (SCI) 三種查詢處理法,對於每一種處理法
1. 描述其處理方式。
2. 估算其成本。
哪一種方式的成本最低?哪一種方式的成本最高?
 
習題10-5
在第五節第三小節的範例四裡,假設所建立的多欄位索引是 (unitPrice, catalog),而非 (catalog, unitPrice)。請問利用 (SCI) 來運算的成本為何?
 
習題10-6
考慮以下的查詢句:
SELECT *
FROM Product
WHERE unitPrice > 500 AND catalog = ‘Book’;
假設 DBMS 裡記載著有約 1/4 的商品為書,有約 1/5 的商品定價高於500。此外,rProduct = 100,000, bProduct = 5,000, xcatalog = 2,bI1catalog = 100,xunitPrice = 3,bI1unitPrice = 1,000,假設 catalog 和 unitPrice 皆非群聚索引。
1. 若利用catalog 的索引結構來處理此查詢句,成本約為多少?
2. 若利用unitPrice 的索引結構來處理此查詢句,成本約為多少?
3. 若用資料頁循序搜尋 (SL) 來處理此查詢句,成本約為多少?
 
習題10-7

考慮以下的查詢句:
SELECT *
FROM Product
WHERE unitPrice > 500;
假設 DBMS 裡記載著有約 1/4 的商品定價高於 500,此外,rProduct = 100,000,
bProduct = 5,000, xcatalog = 2,bI1catalog = 100,xunitPrice = 3, bI1unitPrice = 1,000。
1. 若利用資料頁循序搜尋 (SL) 來處理此查詢句,成本約為多少?
2. 若unitPrice 的索引是群聚索引,則利用 unitPrice 的索引結構來處理此查詢
句,成本約為多少?
3. 若unitPrice 的索引不是群聚索引,則利用unitPrice 的索引結構來處理此查詢
句,成本約為多少?

 
習題10-8
考慮以下的查詢句:
SELECT *
FROM Product
WHERE unitPrice > 500 AND catalog = ‘Book’;
假設DBMS 裡記載著有約1/4 的商品為書,有約1/5 的商品定價高於500,此外,rProduct = 100,000, bProduct = 5,000, xcatalog = 2,bI1catalog = 100,xcatalog, unitPrice = 3, xunitPrice, catalog = 3, bl1catalog, unitPrice = bl1unitPrice, catalog = 1,000。其中catalog 為群聚索引,(catalog, unitPrice) 和 (unitPrice, catalog) 皆非群聚索引。
1. 若利用catalog 的索引結構來處理此查詢句,成本約為多少?
2. 若利用 (catalog, unitPrice) 的索引結構來處理此查詢句,成本約為多少?
3. 若利用 (unitPrice, catalog) 的索引結構來處理此查詢句,成本約為多少?
 
習題10-9
考慮以下的查詢句:
SELECT *
FROM Product
WHERE unitPrice > 500 AND catalog = ‘Book’;
利用以下的哪些索引可以有較低的查詢成本?
A. CREATE INDEX I1 ON Product (unitPrice DESC, catalog)
B. CREATE INDEX I2 ON Product (unitPrice ASC, catalog)
C. CREATE INDEX I3 ON Product (catalog, unitPrice DESC)
D. CREATE INDEX I4 ON Product (catalog, unitPrice ASC)
 
習題10-10
假設有一個資料表 R (A1, A2, A3),並在A1、A2 和 (A2, A1) 分別建立索引,其中A1 的索引為群聚索引,相關資訊如下:
rR = 100,000;
bR = 4,000
xA1 = 2
dA1 = 40
xA2 = 3
bI1A2 = 500
dA2 = 1,000
xA2, A1 = 4
bI1A2, A1 = 1,000
考慮以下的查詢句:
SELECT A3
FROM R
WHERE A1 > 5 AND A2 = 10,000;
1. 若利用資料頁循序搜尋來處理此查詢句,成本約為多少?
2. 若利用A1 的索引結構來處理此查詢句,成本約為多少?
3. 若利用A2 的索引結構來處理此查詢句,成本約為多少?
4. 若利用 (A2, A1) 的索引結構來處理此查詢句,成本約為多少?