使用子查询是否比在 MySQL 中使用 Limit offset 和 order by 更有效?

Fak*_*ipo 3 mysql rdbms

例如,我们有一个问题,要找到表中薪水第二高的员工。这是我的桌子

id  name    dept    salary
1   Ram     HR      10000
2   Amrit   MRKT    20000
3   Ravi    HR      30000
4   Nitin   MRKT    40000
5   Varun   IT      50000
Run Code Online (Sandbox Code Playgroud)

然后我会写一个这样的子查询。

select e_name,salary from employee
    where salary = (select max(salary) from employee
                    where salary <> (select max(salary) from employee));
Run Code Online (Sandbox Code Playgroud)

我会像这样使用限制和偏移:

select e_name, salary from employee order by salary desc limit 1 offset 1;
Run Code Online (Sandbox Code Playgroud)

以下哪一项会更有效率?为什么?

J.D*_*.D. 6

有很多的变数,当涉及到性能和查询优化,所以没有保证的答案,哪一个会是更好的性能,在任何给定的时间数据,而无需测试,并观察他们的查询计划。

但总的来说,第二个示例使用LIMITandOFFSET可能更有效,因为它只查询employee表一次,而不是第一个示例中的三次。