Jump to content

Recommended Posts

Привет, Симпла 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

Что с ним не так?

Link to post
Share on other sites

Что с ним не так, надо определять на Вашем сервере, проверяя нагрузку выполнения, время и прочее. На вид запрос почти типовой для Simpla, разве что можно было бы упростить его, убрав "LEFT JOIN s_brands b". 

 

Link to post
Share on other sites
37 минут назад, phukortsin сказал:

Что с ним не так, надо определять на Вашем сервере, проверяя нагрузку выполнения, время и прочее. На вид запрос почти типовой для Simpla, разве что можно было бы упростить его, убрав "LEFT JOIN s_brands b". 

 

тогда не будет выгрузки по определенным брендам, я правильно понимаю? А выгрузятся все товары по всем брендам.

Edited by transinffo
Link to post
Share on other sites
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,...) вот это будет быстрее чем то что у вас.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...