首頁 > 資料庫 > mysql教程 > 如何從大型資料庫表中有效率地選擇每組一行?

如何從大型資料庫表中有效率地選擇每組一行?

Barbara Streisand
發布: 2024-12-31 01:04:08
原創
273 人瀏覽過

How to Efficiently Select One Row per Group from a Large Database Table?

有效率地從每組中選擇一行

在擁有數百萬筆記錄的大型產品表中,最佳化查詢對於效能至關重要。常見的場景是根據特定列(例如每個商店的最大 ID)從表格的每組中檢索單行。

原始查詢與效能問題:

用於此任務的初始查詢是:

SELECT id, product_name, store_id
FROM product
GROUP BY store_id
ORDER BY id.
登入後複製

但是,由於分組和聚合,此查詢面臨效能問題

建議方法:

建議方法:
SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  store_ID, MAX(ID) max_ID
            FROM    tableName
            GROUP BY store_ID
        ) b ON a.store_ID = b.store_ID AND
                a.ID = b.max_ID
登入後複製

一個有效的解決方案是使用子查詢來確定每個商店的最大ID並將其連接到主表:

該查詢在子查詢中執行分組和聚合,從而得到更好的結果

  • 其他效能提示:
確保表在ID 和store_id 欄位上有索引。

考慮使用資料庫支援並行化和最佳化的伺服器

多行選擇:
SELECT ID, product_Name, store_ID
FROM   tableName a
WHERE
  (
     SELECT COUNT(*) 
     FROM   tableName b
     WHERE  b.store_ID = a.store_ID AND b.ID >= a.ID
  ) <= 2;
登入後複製

如果需要從每個群組中擷取多行,可以使用以下查詢:此查詢根據ID 列從每個群組中檢索最多兩行。

以上是如何從大型資料庫表中有效率地選擇每組一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板