Как я могу улучшить производительность для этого запроса соединительной таблицы - PullRequest
0 голосов
/ 25 марта 2019

Есть таблица 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 голосов
/ 25 марта 2019

Я думаю, что самая простая форма запроса:

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;

Я бы попробовал это перед тем, как пробовать другие формы.Я ожидал бы, что ответ Зайнула (с использованием EXISTS) будет немного быстрее с правильными индексами, но иногда MySQL удивляет меня.

0 голосов
/ 25 марта 2019

вы можете попробовать с помощью коррелированного подзапроса и сделать индекс для ID и COMPANY_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
                   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...