在sql min或top中效率更高?
select MIN(salary) from ABC
select top 1 salary from ABC order by salary asc
答案 0 :(得分:3)
最佳方式是查看执行计划,结果可能会有所不同。
我在我当前的环境中尝试了这一点,MIN()
似乎工作得更快,在第一种情况下SORT BY
几乎吃掉了所有东西。
使用MIN()
索引扫描需要96%的执行时间,这很好。
表包含大约10亿条记录。
答案 1 :(得分:3)
您正在寻找最低工资。所以使用MIN(salary)
;它就是为了这个目的而制造的。因此,您的查询尽可能具有可读性和可维护性。由于使用MIN或MAX,我从未见过有人遇到性能问题。
除了在列表中找到最小值的任务非常简单。排序列表的任务(仅保留第一行)是另一个。如果你很幸运,DBMS会看到这一点并且根本没有排序,但只是为你查找最小值,然后你已经和MIN在一起了。
如果对于某些奇迹MySQL执行TOP 1查询的速度比MIN查询快,那么请考虑这是一个缺陷,但坚持使用MIN查询,并等待未来版本的MySQL更好地执行: - )
仅当您需要记录中的MIN或MAX值时才使用TOP n查询。
答案 2 :(得分:2)
在sql server 2012上进行的测试(你没有要求特定版本,这就是我所拥有的):
-- Create the table
CREATE TABLE ABC (salary int)
-- insert sample data
DECLARE @I int = 0
WHILE @i < 1000000 -- that's right, a million records..
BEGIN
INSERT INTO ABC VALUES (@i)
SET @I = @I + 1
END
包括执行计划并运行两个查询:
select MIN(salary) from ABC
select top 1 salary from ABC order by salary asc
结果:
没有索引:
使用索引:(群集和非群集导致相同的执行计划)