如何提高此联结表查询的性能

时间:2019-03-25 04:19:42

标签: mysql sql

有SALARY表和COMPANY表。

我需要输出AVG薪水高于14000的公司名称列表

期望输出。公司名称列表

Baker Hughes Incorporated 
...

这是我当前的查询。我想知道是否有更有效的查询方法?

SELECT NAME FROM COMPANY WHERE ID in (
    SELECT COMPANY_ID 
    FROM Salary S 
    GROUP BY COMPANY_ID Having  AVG(Salary) >= 140000
)

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以尝试使用相关子查询并在IDCOMPANY_ID上做索引

SELECT NAME FROM COMPANY c WHERE exists (
        SELECT 1  COMPANY_ID 
        FROM Salary s  where s.COMPANY_ID=c.ID
         Having  AVG(Salary) >= 140000
                   )

答案 1 :(得分:0)

我认为查询的最简单形式是:

SELECT c.Name
FROM Company c JOIN
     Salary s
     ON s.COMPANY_ID = c.ID
GROUP BY c.Name, c.COMPANY_ID
HAVING AVG(s.Salary) >= 14000;

在尝试其他形式之前,我会先尝试一下。我希望Zaynul的答案(使用EXISTS)使用正确的索引会稍快一些,但有时MySQL会让我感到惊讶。