Hej, mam problem z optymalizacją zapytania, struktura wygląda mniej więcej tak:
jest tabela z firmami oraz z produktami połączone wiele do wielu w tabeli łączącej dodatkowo przechowywana jest ilość produktu oraz data wygaśnięcia licencji produktu - mam zapytanie które pobiera firmy wraz z datą zakończenie licencji najstarszego produktu wygląda to tak:
SELECT
company.id,
company.name,
(
SELECT product_brand.name FROM company_products
LEFT JOIN product ON company_products.product = product.id
LEFT JOIN product_brand ON product.brand_id = product_brand.id
WHERE company = company.id ORDER BY `date` ASC limit 1
) as brand_name,
(
SELECT product_brand.id FROM company_products
LEFT JOIN product ON company_products.product = product.id
LEFT JOIN product_brand ON product.brand_id = product_brand.id
WHERE company = company.id ORDER BY `date` ASC limit 1
) as brand_id,
(SELECT MIN(`date`) FROM company_products WHERE company = company.id ) as date_end,
(SELECT SUM(quantity) FROM company_products WHERE company = company.id) as quantity,
company.phone,
company.zip,
company.city,
state.id as state_id,
state.name as state_name,
company.street,
user.id as user_id,
user.name as user_name,
user.surname as user_surname,
company_group.id as company_group_id,
company_group.name as company_group_name
FROM `company`
LEFT JOIN company_group ON company.company_group = company_group.id
LEFT JOIN user ON company.supervisor = user.id
LEFT JOIN state ON company.state = state.id
Zapytanie działa bardzo szybko koło 0.002s problem pojawia się przy orderach np order by (SELECT MIN(`date`) FROM company_products WHERE company = company.id )
trwa już 0.4s jak przyspieszyć takie zapytanie ? Czy dobrym pomysłem było by trzymanie date i ilości w tabeli firm i update tych wartości wraz ze zmianami w tabli z produktami?