这是产品表的结构 目前有超过100万条记录。 当我使用查询组时,我遇到了性能问题。订购。
查询:
SELECT product_name FROM vs_product GROUP BY store_id ORDER BY id DESC LIMIT 2
如何改善此查询以更快地执行?我索引了store_id,ID是主键。
答案 0 :(得分:0)
您需要这样的查询:
select p.*
from product p join
(select store_id, max(id) as maxid
from product p
group by store_id
) psum
on psum.store_id = p.store_id and p.id = maxid
您在任何表格中都没有日期,因此我假设最大的ID是最新的。
答案 1 :(得分:0)
SELECT x.*
FROM my_table x
JOIN (SELECT store_id, MAX(id) max_id FROM my_table GROUP BY store_id) y
ON y.store_id = x.store_id
AND y.max_id = x.id
ORDER
BY store_id DESC LIMIT 2;
答案 2 :(得分:0)
一个hacky(但很快)的解决方案:
SELECT product_name
FROM (
SELECT id
FROM vs_product
GROUP BY store_id DESC
LIMIT 2) as ids
JOIN vs_product USING (id);
工作原理:
您对store_id商店(store_id,id)的索引按升序排列。 GROUP BY DESC
将使MySQL以相反的顺序读取索引,即子查询将获取每个store_id的最大ID。然后,您只需将它们连接回整个表格即可获取产品名称。
请注意,查询将获取具有最大值的商店ID的两个产品名称。