在SQL中获取特定记录列表的最新版本的最佳方法

约翰

我想查询巨型表(SQL Server)以获取一组记录的最新版本,例如

桌子:

Id, key, Ver
1, A, 1
2, B, 1
3, A, 2
4, B, 2
5,B, 3

结果:

Id, Key, Ver
3, A, 2
5, B, 3

此处提到的join方法将起作用,但仅当想要获取所有密钥的最新版本时才有效,但是如果我们仅关心密钥的子集,则join将产生过多的开销。所以我想问我们是否应该做一个循环

select top 1 * from table where key = 'A' order by ver desc

或者

select max(ver), key from table where key in ('A', 'B') group by key

还是有更好的方法呢?干杯

乔德雷尔

本质上,n对于任何RDBMS而言,一次循环一组键并执行一次操作是一种不好的方法。它阻止查询引擎进行优化,并保证n对表\索引的搜索\扫描。

如果您可以将查询表示为基于集合的操作,这将使查询引擎完全优化您的操作,从而创建更为优化的查询计划。

如果您使用的是SQL Server 2008或更高版本,请使用RANK

SELECT
            [Id],
            [Key],
            [Ver]
    FROM
            [Table]
    WHERE
            RANK() OVER (PARTITION BY [Key], ORDER BY [Ver] DESC) = 1;

使用更通用的SQL

SELECT
            [T1].[Id],
            [T2].[Key],
            [T2].[Ver]
    FROM (
            SELECT
                        [Key]
                        MAX([Ver]) [Ver]
                FROM
                        [Table]
                WHERE
                        [Key] IN ('A', 'B')
                GROUP BY
                        [Key]) [T2]
        JOIN
            [Table] [T1]
                ON [T1].[Key] = [T2].[Key] AND [T1].[Ver] = [T2].[Ver];

为确保两个查询的性能,请在Keythen上创建覆盖索引Ver

CREATE UNIQUE NONCLUSTERED INDEX [IX_Table_Key_Ver]
    ON [Table] ([Key], [Ver] DESC);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查询Microsoft Access中记录的最新版本

来自分类Dev

从红宝石数组中获取最新版本

来自分类Dev

在bash中获取最新版本的openssl

来自分类Dev

从BASH中以换行符分隔的列表中获取最新版本

来自分类Dev

从BASH中以换行符分隔的列表中获取最新版本

来自分类Dev

获取最新版本的mono

来自分类Dev

获取最新版本的mono

来自分类Dev

Gajim - 获取最新版本

来自分类Dev

如何在特定项目的TFS中获取最新版本

来自分类Dev

如果基于三列的记录与最新版本的记录不匹配,是否可以在SQL Server中插入记录?

来自分类Dev

presto/aws athena - 选择记录的最新版本

来自分类Dev

使用SQL有效查询记录的最新版本

来自分类Dev

“ ti sdk列表”未显示最新版本

来自分类Dev

Cordova插件-安装特定平台的最新版本

来自分类Dev

nuget spec依赖项,获取最新版本?

来自分类Dev

Gajim-获取最新版本

来自分类Dev

在Ubuntu 14.04上获取最新版本的Evolution

来自分类Dev

如何从GitHub获取最新版本的代码?

来自分类Dev

无法获取最新版本的Git

来自分类Dev

在Ubuntu 14.04上获取最新版本的Evolution

来自分类Dev

发送通知以在TFS上获取最新版本

来自分类Dev

如何获取最新版本的git?

来自分类Dev

如何获取Adobe Flash Player的最新版本?

来自分类Dev

如何获取最新版本的gzip?

来自分类Dev

获取最新版本的 java api 文档

来自分类Dev

Gradle 为某些库获取最新版本

来自分类Dev

如何从 Google Play 获取应用的最新版本?

来自分类Dev

Ubuntu 16.0.4在缓存中具有Apache 2.4.18,但最新版本是2.4.29。是否需要获取最新版本?

来自分类Dev

获取最新版本更改时间戳 SQL Server

Related 相关文章

热门标签

归档