在SQL Server中哪个查询更快:MIN + GROUP BY或MIN OVER PARTITION BY和SELECT DISTINCT?

时间:2020-08-24 16:43:40

标签: sql sql-server

与每天要提取的行数相比,我正在处理一个非常慢的数据库。我正在尝试创建一个视图以聚合一些值,但是执行超时。

对于SQL Server,哪个查询应该更快?

SELECT
    userID,
    sessionID,
    Date,
    MIN(Country) Country,
    MIN(Status) Status
FROM
   SomeTable
GROUP BY
    userID,
    sessionID,
    Date

SELECT DISTINCT
    userID,
    sessionID,
    Date,
    MIN(Country) OVER (PARTITION BY userID, sessionID, Date) Country,
    MIN(Status) OVER (PARTITION BY userID, sessionID, Date) Status
FROM
    SomeTable

直觉上,我假设第一个是因为它执行的操作较少。但是,我之前与Oracle合作过,似乎第二种方法总是更快。对于SQL Server应该是什么?

1 个答案:

答案 0 :(得分:2)

如果您确实需要,您需要测试两种不同的方法。

但是,没有理由认为select distinct方法会更快。毕竟,它告诉引擎向每行添加一个新列,然后删除重复项。看来它永远不会比内置GROUP BY的功能更快。但是,两者很有可能会生成相同的执行计划。

而且,GROUP BYSELECT语句中少数几个子句之一,因此它是SQL语言的基本组成部分。使用GROUP BY使查询的意图更加清晰。

相关问题