簡體   English   中英

優化分組方式和查詢順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM