考慮以下的商品交易資料庫綱目(Database schema):
User(uId, name, rdate)
//使用者編號,姓名,加入日期
Product(pId, seller, name, category, star)
//商品編號,賣家名稱,名稱,類別,星等
Transaction(uId, pId, seller, date, amount, star)
//使用者編號,商品編號,賣家名稱,日期,數量,星等
各資料表的主鍵(Primary key)以底線表示。此外,並有以下的外鍵
(Foreign key):
Transaction(uId)參考到User 的主鍵
Transaction(pId, seller)參考到Product 的主鍵
若我們有以下的SQL 敘述:
SELECT uId, name
FROM User AS U
WHERE YEAR(rdate)>= ‘2020’
AND
uId IN
(SELECT uId
FROM Transaction AS T
WHERE T.uId = U.uId AND star = 5 AND
EXISTS
(SELECT *
FROM Product
WHERE pId = T.pId AND
category = ‘Bluetooth earphone’));
請說明以上查詢句的意義。(5 分)
以上查詢句的執行效率可能不佳,請指出造成其效率不佳的語法,並
改寫成一個效率較佳的敘述。(10 分)
針對你所改寫的查詢句,若想進一步提升其執行效率,請問可以建置
那些索引(Index)?請寫出建置這些索引的SQL 敘述並說明原因。
(5 分)