SQL最大行表

时间:2010-12-11 16:36:06

标签: sql sql-server

在SQL Server 2008中哪个更好,或者在数据库优化时无关紧要。

SELECT * FROM table
WHERE datecolumn = (SELECT max(datecolumn) FROM table);


SELECT TOP 1 * FROM table ORDER BY datecolumn DESC;

3 个答案:

答案 0 :(得分:9)

查看这些查询的实际SQL执行计划,它会产生完全相同的执行计划和相同的执行成本。但是,根据索引设置和收集的统计信息,它可能会有所不同,因此最好自己进行检查。

要注意的一件事是两个查询可能不会返回相同的结果。如果datecolumn不唯一,第二个SQL将始终返回一条记录,其中第一条记录可能返回多行。

答案 1 :(得分:1)

SELECT * FROM table WHERE datecolumn =(SELECT max(datecolumn)FROM table);

SELECT TOP 1 * FROM table ORDER BY datecolumn DESC;

这些查询将返回差异结果的成本。从sql server执行计划的第一个查询。子查询将首先运行并扫描表元组并获取最大日期列 之后,外部查询将扫描表并搜索datcolumn = .....这种方式不是效率。

第二个查询效率更高,因为一次只有一个表的扫描元组。

注意:如果datacolumn是主键或索引列,则两个查询的差异不大。但如果这个列不是索引和主键,它可以在成本上有显着差异

答案 2 :(得分:0)

您需要查看答案的执行计划。