[英]Optimize Group by & Order by query
這是產品表的結構。
目前有100萬條記錄。 使用查詢分組依據和排序依據時出現性能問題。
查詢:
SELECT product_name FROM vs_product GROUP BY store_id ORDER BY id DESC LIMIT 2
如何提高此查詢的執行速度? 我索引了store_id,ID是主鍵。
您想要這樣的查詢:
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是最新的ID。
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;
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的產品名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.