Как я могу ускорить этот запрос?

0

Этот запрос очень медленный, и я ищу способ оптимизации.

Есть идеи?

select *, 
      (rating / (select max(rating) from products)) rk_rating, (reviews / 
      (select max(reviews) from products)) rk_reviews, 
      (if(label = "", 0, 1)) rk_label, 
      (1 - price / (select max(price) from products)) rk_price 
from 'products' 
where ('locale' = 'it' or 'locale' = '*') 
  and 'id' in (select 'product_id' 
               from 'location_product' 
               where 'location_product'.'location_id' in (select 'id' 
                                                          from 'locations' 
                                                          where 'place_id' = 'ChIJdd4hrwug2EcRmSrV3Vo6llI' or 'city_place_id' = 'ChIJdd4hrwug2EcRmSrV3Vo6llI')) 
order by (rk_rating * '2' + rk_reviews * '5' + rk_label * '0.5' + rk_price * '50') desc limit 21 offset 
  • 0
    Очень незначительное улучшение (до читабельности, если ничего больше) состоит в том, чтобы генерировать ваш заказ по значению при первом выборе: select ..., (rk_rating * 2 + rk_label * 0.5 + rk_price * 50) rk_order from ..... order by rk_order desc limit 21 offset
Теги:

1 ответ

1

От 3,7 с до 0,1 с более 1,300 тыс. Рядов, с этими шагами:

  • Добавлен индекс на products.locale, products.rating, products.reviews и products.price
  • Добавлен индекс на locations.place_id и locations.city_place_id

Магия случилась.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню