編輯了一排的第一個實例:獲取使用的MS Access
我有這個疑問,其中我想選擇從表petTable記錄的第一個實例。
SELECT id,
pet_ID,
FIRST(petName),
First(Description)
FROM petTable
GROUP BY pet_ID;
問題是我有大量的記錄,這個查詢太慢了。我發現GROUP BY減慢了查詢速度。你有什麼想法可以使這個查詢更快?或更好的查詢,其中我不需要使用GROUP BY?
編輯了一排的第一個實例:獲取使用的MS Access
我有這個疑問,其中我想選擇從表petTable記錄的第一個實例。
SELECT id,
pet_ID,
FIRST(petName),
First(Description)
FROM petTable
GROUP BY pet_ID;
問題是我有大量的記錄,這個查詢太慢了。我發現GROUP BY減慢了查詢速度。你有什麼想法可以使這個查詢更快?或更好的查詢,其中我不需要使用GROUP BY?
你的查詢可以作爲改變,
SELECT ID, pet_ID, petName, Description
FROM petTable
WHERE ID IN
(SELECT Min(ID) As MinID FROM petTable GROUP BY pet_ID);
或者使用TOP子句,
SELECT petTable.petID, petTable.petName, petTable.[description]
FROM petTable
WHERE petTable.ID IN
(SELECT TOP 1 ID
FROM petTable AS tmpTbl
WHERE tmpTbl.petID = petTable.petID
ORDER BY tmpTbl.petID DESC)
ORDER BY petTable.petID, petTable.petName, petTable.[description];
「問題是我的記錄數量龐大且此查詢是太慢了。我發現GROUP BY減慢查詢速度,你有什麼想法可以使查詢更快嗎?「
而就pet_ID
索引,然後創建並測試該查詢:
SELECT pet_ID, Min(id) AS MinOfid
FROM petTable
GROUP BY pet_ID;
一旦你的查詢工作,你可以加入它回到原始表---那將只選擇基於id
匹配的原始行,並且您可以從這些匹配行中檢索所需的其他字段。
SELECT pt.id, pt.pet_ID, pt.petName, pt.Description
FROM
petTable AS pt
INNER JOIN
(
SELECT pet_ID, Min(id) AS MinOfid
FROM petTable
GROUP BY pet_ID
) AS sub
ON pt.id = sub.MinOfid;
您的表沒有主鍵嗎?如果pet_ID是主鍵,則不需要使用First,因爲對於同一個寵物不應該有多於1條記錄。 – PaulFrancis
@paulFrancis,我剛剛更新了我的文章。假設我有id作爲主鍵並且pet_id可能在表中出現多次 – slek
使用DISTINCT還會使查詢速度太慢 – slek