Во-первых, я не думаю, что select distinct
необходим. Почему companyId
дублируется в таблице company
? Кроме того, я ожидаю, что join
принесет только один город.
Избегайте natural join
. Это просто ждущие ошибки. Вы не знаете, какие ключи объединения используются, и он даже не использует должным образом объявленные отношения внешних ключей.
Позвольте мне предположить, что это ваш запрос:
select c.CompanyId
from Company c join
City ci
on c.cityId = ci.cityId
where c.nbEmployees >= 5000 and ci.nameCity = 'Lisboa';
У вас есть два подхода к оптимизации. Сначала я бы предложил индексы на Company(nbEmployees, cityId)
и City(cityId, 'Lisboa')
.
Если у вас много компаний с более чем 5000 сотрудников и очень мало в Лиссабоне, тогда альтернативная стратегия индексации - city(nameCity, cityId)
, company(cityId, nbEmployees, companyId)
.