繁体   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