与每天要提取的行数相比,我正在处理一个非常慢的数据库。我正在尝试创建一个视图以聚合一些值,但是执行超时。
对于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应该是什么?
答案 0 :(得分:2)
如果您确实需要,您需要测试两种不同的方法。
但是,没有理由认为select distinct
方法会更快。毕竟,它告诉引擎向每行添加一个新列,然后删除重复项。看来它永远不会比内置GROUP BY
的功能更快。但是,两者很有可能会生成相同的执行计划。
而且,GROUP BY
是SELECT
语句中少数几个子句之一,因此它是SQL语言的基本组成部分。使用GROUP BY
使查询的意图更加清晰。