@Nikolaymac

Как ускорить запрос SELECT с вложенными запросами?

Подскажите как можно упростить такой запрос.. ускорить
SELECT 
    addresses.*, 
    accounts.id_account, 
    accounts.name as name_account,
    clients_addresses.id_client as on_client,
    clients.name 
FROM addresses 
LEFT JOIN accounts 
    ON accounts.id_account = addresses.id_account 
LEFT JOIN clients_addresses 
    ON clients_addresses.id_address = addresses.id_address 
LEFT JOIN clients 
    ON clients_addresses.id_client = clients.id_client 
WHERE 
    addresses.id_project = 10 
    AND addresses.id_address NOT IN (
        SELECT id_address FROM clients_addresses WHERE id_address = addresses.id_address
    ) 
    AND addresses.id_account = 65 
GROUP BY addresses.id_address 
ORDER BY address desc 
LIMIT 0,100
  • Вопрос задан
  • 567 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
индексы + внешние ключи
Ответ написан
@nozzy
Symfony, Laravel, SQL
Вот это:
AND addresses.id_address NOT IN (
        SELECT id_address FROM clients_addresses WHERE id_address = addresses.id_address
    )

заменить на:
AND clients_addresses.id_address IS NULL

Если addresses таблица большая,
можно сделать:
SELECT 
 a.*,
 accounts.id_account, 
 accounts.name as name_account,
 clients_addresses.id_client as on_client,
 clients.name 
FROM 
(SELECT 
*
FROM addresses
WHERE id_project = 10 
AND id_account = 65
) a
LEFT JOIN ....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы