transinffo Posted October 28, 2021 Report Share Posted October 28, 2021 Привет, Симпла 2.3.6, 20 тыс. товаров, есть файл для Гугла с товарами, определили что он перегружает хостинг. Выгружаю не все товары, а по определенным брендам. Вот сам запрос: SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.body, pc.category_id, i.filename as image FROM s_variants v LEFT JOIN s_products p ON v.product_id=p.id LEFT JOIN s_brands b ON b.id = p.brand_id LEFT JOIN s_products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM s_products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN s_images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM s_images WHERE product_id=p.id LIMIT 1) WHERE p.visible AND (v.stock >0 OR v.stock is NULL) AND (v.price>0) AND (b.id = 63 OR b.id = 13 OR b.id = 34 OR b.id = 14 OR b.id = 25 OR b.id = 35 OR b.id = 40 OR b.id = 165 OR b.id = 201 OR b.id = 15 OR b.id = 211 OR b.id = 19 OR b.id = 23 OR b.id = 17) GROUP BY v.id ORDER BY p.id, v.position Что с ним не так? Quote Link to post Share on other sites
phukortsin Posted October 28, 2021 Report Share Posted October 28, 2021 Что с ним не так, надо определять на Вашем сервере, проверяя нагрузку выполнения, время и прочее. На вид запрос почти типовой для Simpla, разве что можно было бы упростить его, убрав "LEFT JOIN s_brands b". Quote Link to post Share on other sites
transinffo Posted October 28, 2021 Author Report Share Posted October 28, 2021 (edited) 37 минут назад, phukortsin сказал: Что с ним не так, надо определять на Вашем сервере, проверяя нагрузку выполнения, время и прочее. На вид запрос почти типовой для Simpla, разве что можно было бы упростить его, убрав "LEFT JOIN s_brands b". тогда не будет выгрузки по определенным брендам, я правильно понимаю? А выгрузятся все товары по всем брендам. Edited October 28, 2021 by transinffo Quote Link to post Share on other sites
phukortsin Posted October 28, 2021 Report Share Posted October 28, 2021 Смотря как действовать. Можно и сохранить вывод по выделенным брендам... Quote Link to post Share on other sites
a13x Posted October 28, 2021 Report Share Posted October 28, 2021 7 часов назад, transinffo сказал: тогда не будет выгрузки по определенным брендам, я правильно понимаю? А выгрузятся все товары по всем брендам. Неправильно. Выборка осуществляется в условии WHERE. Я вобще не понимаю зачем там используется таблица brands, т.к. в селекте нигде ничего про бренд не сказано. В товарах итак хранится brand_id, поэтому ничего не мешает вместо b.id использовать p.brand_id, но от нагрузки это врядли спасёт, т.к. вероятная причина в этом (b.id = 63 OR b.id = 13 OR b.id = 34 OR b.id = 14 OR b.id = 25 OR b.id = 35 OR b.id = 40 OR b.id = 165 OR b.id = 201 OR b.id = 15 OR b.id = 211 OR b.id = 19 OR b.id = 23 OR b.id = 17) рекомендую использовать конструкцию ... AND p.brand_id IN (63,13,34,...) вот это будет быстрее чем то что у вас. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.