2013-03-07 113 views
5

问题很简单。哪个查询会更快:性能差异:选择top 1 order by vs. select min(val)

SELECT TOP 1 value FROM table ORDER BY value 

SELECT TOP 1 MIN(value) FROM table 

我们可以假设,我们有两种情况,案例1.没有索引与案例2.价值指数。
任何见解都值得赞赏。谢谢!

+6

你不需要调用'TOP 1',因为'MIN'已经返回一个值。 – 2013-03-07 16:07:47

+0

如果有任何差异,它将取决于所使用的dbms,因此您可能想要添加哪一个您感兴趣。 – 2013-03-07 16:13:11

+1

这两个操作不相等,如果例如在列中存在'NULL'值1' +'order by'将返回NULL,MIN则是最小的非空值。 – Magnus 2013-03-07 16:32:44

回答

9

在不存在索引的情况下:

  • MIN(值)应在O(N)的时间与单个扫描来实现;
  • TOP 1 ORDER BY将需要O(N日志N)时间,因为指定的排序(除非数据库引擎足够聪明来读取意图,我不想依赖于生产代码)。

当一个索引确实存在:

  • 两者都应仅需要O(1)时间,使用索引。
+0

谢谢。我一直在寻找这样的答案! – www 2013-03-07 18:48:31

+0

我看到“已批准”进来 - 这总是足够的感谢。 – 2013-03-07 18:52:38