簡體   English   中英

如何從表GROUP BY some_field優化SELECT some_field,max(primary_key)

[英]How to optimize SELECT some_field, max(primary_key) FROM table GROUP BY some_field

我在SQL Azure中有SQL查詢:

SELECT some_field, max(primary_key) FROM table GROUP BY some_field

表格目前有超過600萬行。 創建索引開(some_field asc,primary_key desc)。 primary_key字段是增量的。 some_field大約有700個不同的值。 此選擇至少需要30秒。

此表中只有插入,沒有更新或刪除。

我可以創建單獨的表來存儲some_field和主鍵的最大值,並編寫觸發器來構建它,但是我正在尋找更優雅的解決方案。 有沒有?

不知道這是否會表現出色,但您可以試一試...

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY some_field ORDER BY primary_key DESC) AS rn
   FROM table
)
SELECT *
FROM cte
WHERE rn = 1

一定要在“ somefield”列上建立索引的“ somefield”和“ highestPK”列的輔助表。 首先將其構建為基准並使用它。

然后,每當將任何新記錄插入600萬個記錄表中時,都需要一個簡單的觸發器,以使用如下簡單的方法來更新輔助表。

update SecondaryTable
   set highestPK = newlyInsertedPKID
   where somefield = newlyInsertedSomeFieldValue

這樣,每次插入都會保持更新,因為“ somefield”列的最高PK將符合條件,並且如果沒有可用的更新,則使用新的“ somefield”值插入輔助表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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