编辑:
我有这个查询,其中我想从表 petTable 中选择记录的第一个实例。
SELECT id,
pet_ID,
FIRST(petName),
First(Description)
FROM petTable
GROUP BY pet_ID;
问题是我有大量的记录,这个查询太慢了。我发现 GROUP BY 会降低查询速度。你有什么想法可以让这个查询更快?或更好的查询,其中我不需要使用 GROUP BY ?
答案 0 :(得分:1)
"问题是我有大量的记录,这个查询太慢了。我发现 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;
答案 1 :(得分:0)
您的查询可能会更改为,
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];