101高考 SQL - 高考

Table of Contents

小弟SQL觀念薄弱
作了很多題目都覺得似是而非...有點慌
請問一下(二)作答是否正確?
是否有更有效率的作法?
(三)沒有頭緒...請問此小題該如何作答
謝謝
=======================101高考二級=============================
二、考慮以下的討論版資料庫綱目(Database schema):
Member(mId, name, bDate, gender)
//會員編號,姓名,生日,性別
Article(mId, aId, title, content, postDate)
//會員編號,文章編號,標題,內容,張貼日期
Reply(mId, aId, rTime, content, responder)
//會員編號,文章編號,回覆日期時間,回覆內容,回覆者
若我們有以下的SQL敘述:

SELECT mId, name
FROM Member AS M
WHERE gender = ‘M’ AND
EXISTS
(SELECT *
FROM Article AS A
WHERE mId = M.mId AND (mId, aId) IN
(SELECT DISTINCT mId, aId
FROM Reply
WHERE mId = A.mId AND aId = A.aId
GROUP BY mId, aId
HAVING COUNT(*) > 10));
(二)以上查詢句的執行效率可能不佳,請指出造成其效率不佳的語法,並改寫成一個效率
較佳的敘述。(10分)
(三)針對你所改寫的查詢句,若想進一步提升其執行效率,請問可以建置那些索引(
Index)?請寫出建置這些索引的SQL敘述並說明原因。(10分)
============================================================================

擬作答:
(二)
SELECT mId, name
FROM Member AS M , Article AS A
WHERE gender = ‘M’ AND
A.mId = M.mId AND
(mId, aId) IN
(SELECT DISTINCT mId, aId
FROM Reply
WHERE mId = A.mId AND aId = A.aId
GROUP BY mId, aId
HAVING COUNT(*) > 10
)
);

--

All Comments

Zanna avatarZanna2014-05-19
第三題我會把主索引 次索引 叢集索引通通想上去 然後
Cara avatarCara2014-05-19
寫出CREATE INDEX [index name] ON Reply(mId,aId)
不太確定 可以討論看看
Lily avatarLily2014-05-21
看你的擬答,發現你沒把題目看懂,再斟酌斟酌。
Zanna avatarZanna2014-05-23
給個建議好了 distinct拿掉 另外 子查詢where拿掉
Belly avatarBelly2014-05-26
同樓上所說 你不要看錯的寫法,看題目的要求 你會怎麼寫
Ida avatarIda2014-05-29
請問還有更有效率的寫法嗎?
Noah avatarNoah2014-06-01
擬作答的WHERE那行是我複製貼上漏刪的....
Daph Bay avatarDaph Bay2014-06-02
把distinct 拿掉即可
Blanche avatarBlanche2014-06-03
2種做法啦 你的是合併外面的exist
Callum avatarCallum2014-06-04
也有人是合併裡面的in 都是用合併取代巢狀
所以應該都對吧