Autor Zpráva
Petik
Profil *
Ahoj,

potřeboval bych poradit s optimalizací dotazu: Mám takovýto dotaz:

SELECT p.evid_product, p.id_product ...
                        FROM products p
                        LEFT JOIN stock s
                        ON s.id_stock = p.stock_product
                        WHERE p.id_product IN (SELECT product_id 
                                                               FROM products_menu 
                                                               WHERE menu_id IN ($menuIdString))
                        LIMIT 12";

kde $menuIdString obsahuje hodně idéček oddělených čárkou. Indexy jsou na products.id_product, products_menu.product_id a products_menu.menu_id. Tento dotaz je zvláště pomalý, když je $menuIdString dlouhé. Dokázal by mě prosím někdo poradit s nějakou optimalizací pro tento dotaz ? Předem moc díky
Tori
Profil
Zkoušel jste JOIN místo IN?
SELECT p.evid_product, p.id_product ... 
                        FROM products p 
                        INNER JOIN products_menu m ON p.id_product = m.product_id
                        LEFT JOIN stock s ON s.id_stock = p.stock_product 
                        WHERE m.menu_id IN ($menuIdString)
                        LIMIT 12";
Co na (oba dotazy) říká EXPLAIN - kde je pomalé místo, nevyužité indexy apod.?
Petik
Profil *
děkuji JOIN mnohem rychlejší než subselect. Přez EXPLAIN jsem zjistil, že jsme venku na hostingu neměl ani index na menu.id to obzvláště brzdilo a ten subselect tomu taky v rychlosti teda nepomáhá.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0