Otóż tworze porównywarkę cen gdzie której chce połączyć 2 tabele i wyciągnąć z niej dane.
Same zapytanie nie jest jakoś skomplikowane ale mimo tego wykonuje się strasznie długo przy dużej ilości rekordów w bazie.
Próbowałem już wielu rzeczy, zmiana struktury bazy itp. i nic. Zawsze przy wielu rekordach w bazie zapytanie strasznie długo się wykonuje. Dodam że także zastosowałem indexy.
Mam 2 tabele "product" oraz "product_offer" (tabele InnoDB)
tabela "product"
id | name | date_added | main
Indexy na: id, name, main
pole main informuje nas czy produkt jest produktem czy ofertą, gdy dany rekord w polu main ma 0 to znaczy że jest przypisany do innego produktu z tej samej tabeli. Przypisania zawarłem w tabeli "product_offer"
id_product | id_offer | price
Indexy na: id_product, id_offer oraz UNIQUE na id_product i id_offer w jednym
Chce wyciąganć wszystkie produktu z nazwa, liczbą ofert do nich przypisaną oraz minimalną cenę.
Oto zapytanie które to wykonuje jednak czas wykonania wynosi ponad 2 s :/
SELECT p.id,p.name,count(po.id_offer) AS offers,min(po.price) AS price_min FROM pco_product AS p LEFT JOIN pco_product_offer AS po ON p.id = po.id_product WHERE (p.main = '1') GROUP BY po.id_product ORDER BY p.name ASC LIMIT 0, 20
Co wy o tym myslicie ? Jak można to przyśpieszyć ?
Dodam także że inne zapytania na innych tabelach ze złączeniami LEFT JOIN także wykonuje się długo przy takiej liczbie rekordów w bazie
