Mysql

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

  • June 24, 2021

例如,我們有一個問題是要找到表中薪水第二高的員工。這是我的桌子

id  name    dept    salary
1   Ram     HR      10000
2   Amrit   MRKT    20000
3   Ravi    HR      30000
4   Nitin   MRKT    40000
5   Varun   IT      50000

然後我會寫一個這樣的子查詢。

select e_name,salary from employee
   where salary = (select max(salary) from employee
                   where salary <> (select max(salary) from employee));

我會像這樣使用限制和偏移:

select e_name, salary from employee order by salary desc limit 1 offset 1;

以下哪項會更有效率?為什麼?

在性能和查詢調整方面存在很多變數,因此無法保證在任何給定時間,如果不測試和觀察查詢計劃,哪一個對您的數據的性能更高。

但總的來說,使用LIMITand的第二個範例OFFSET可能更有效,因為它只查詢employee表一次,而不是第一個範例中的 3 次。

引用自:https://dba.stackexchange.com/questions/294650