我有以下SQL。这需要大约95秒的时间来执行。表中有大约2500万条记录。MySQL使用组查询性能问题
SET @lat=(select latitude from skoovy_prd.pins where user_id=0 and board_id=0 limit 1);
SET @lng=(select longitude from skoovy_prd.pins where user_id=0 and board_id=0 limit 1);
SELECT category_id, MAX(pin_id), pin_id
FROM skoovy_prd.pins
WHERE (3959 * acos(cos(radians(@lat)) * cos(radians(latitude))
* cos(radians(longitude) - radians(@lng)) + sin(radians(@lat)) * sin(radians(latitude)))) <=25
GROUP BY category_id DESC
LIMIT 12;
category_id,纬度,经度,pin_id都是BTREE索引。
有没有更有效的方法来写这个,所以我可以更快地获得记录?这样做的目的是让我获得一组记录,其中每条记录都是一个独特的类别。我发布这个问题后得到的SQL这里:这mysql selecting records but ensuring data in one column is distinct它被标记为的Retrieving the last record in each group
重复有通过newtlover在回答这使我我已经写在这里发布的SQL列表提供了解决方案。 (尽管我并不是真的在寻找每组中的最后一条记录,但至少可以获得记录集中category_id不同的记录。
我希望有一种方法可以提高此查询的性能。如果有人有任何建议来解决每组中的最后一个记录,那也是值得赞赏的。我不是一个SQL人,所以我在这里抓住吸管
你确定这应该是'GROUP BY category_id DESC'? – andy 2014-09-19 22:22:11
有或没有DESC是相同的性能明智的,并产生可接受的正确结果 – kambythet 2014-09-19 22:50:13
当您不使用分组使用'SELECT DISTINCT category_id,pin_id'时,您可能会得到更快的结果。我不确定是否提供了您期望的结果,但查询可以在12次访问后完成,不像'GROUP BY'版本,所有带有找到的category_id的记录都需要考虑'MAX(pin_id)'。 – andy 2014-09-19 23:01:20