Autor | Zpráva | ||
---|---|---|---|
Petik Profil * |
#1 · Zasláno: 12. 12. 2011, 21:34:55
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 |
#2 · Zasláno: 12. 12. 2011, 22:05:36
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"; |
||
Petik Profil * |
#3 · Zasláno: 13. 12. 2011, 22:13:54
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á.
|
||
Časová prodleva: 12 let
|
0