![](/img/trans.png)
[英]How to do SELECT CONVERT(bigint,some_field) in Linq to Entities
[英]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.