这可能是一个非常简单的问题,但没有找到完美的答案。 查询是找到第二高的工资,可以通过使用max和限制两者来完成..
使用MAX
select max(salary) from table1 where
salary < (select max(salary) from table1);
使用限制
select salary from table1 where
salary < (select max(salary) from table1)
order by salary desc
limit 1;
考虑到有1000个记录,那么哪个查询会更好,耗时更少。
提前致谢。
答案 0 :(得分:5)
这两种查询都不是正确的方法。您从所有记录中薪水低于MAX(薪水)的记录中获得MAX(薪水)。换句话说,薪水第二高。这样做的方法就是这样:
SELECT salary FROM table1 ORDER BY salary DESC LIMIT 1,1
如果你真的想要最大值,那就去做
SELECT MAX(salary) FROM table1
这里不需要子查询。无论如何,请确保您已将工资列编入索引,否则无论您如何运行它,查询都会很慢。
答案 1 :(得分:2)
在我看来,使用MAX
的第一个查询会更有效。
第二个查询需要对结果进行排序,结果有自己的开销。我已经看到聚合查询通常比选择所有查询更有效。
免责声明:这完全基于我对SQL查询的理解,但我没有做任何基准测试。