Виснет запрос SELECT DISTINCT pf11.feature_id, pf11.feature_value_id FROM shop_product p JOIN shop_product_features Есть решение

Query Error 1053: Server shutdown in progress

Query: SELECT DISTINCT pf11.feature_id, pf11.feature_value_id FROM shop_product p JOIN shop_product_features pf1 ON p.id = pf1.product_id JOIN shop_product_features pf2 ON p.id = pf2.product_id JOIN shop_product_features pf3 ON p.id = pf3.product_id JOIN shop_product_features pf4 ON p.id = pf4.product_id JOIN shop_product_features pf5 ON p.id = pf5.product_id JOIN shop_product_features pf6 ON p.id = pf6.product_id JOIN shop_product_features pf7 ON p.id = pf7.product_id JOIN shop_product_features pf8 ON p.id = pf8.product_id JOIN shop_product_features pf9 ON p.id = pf9.product_id JOIN shop_product_features pf10 ON p.id = pf10.product_id JOIN shop_category_products cp1 ON p.id = cp1.product_id JOIN shop_product_features pf11 ON p.id = pf11.product_id WHERE p.status = 1 AND p.status = 1 AND pf1.feature_id = 10 AND pf1.feature_value_id = 57 AND pf2.feature_id = 11 AND pf2.feature_value_id = 27 AND pf3.feature_id = 62 AND pf3.feature_value_id = 1401 AND pf4.feature_id = 122 AND pf4.feature_value_id = 1864 AND pf5.feature_id = 92 AND pf5.feature_value_id = 1170 AND p.status = 1 AND pf6.feature_id = 10 AND pf6.feature_value_id = 57 AND pf7.feature_id = 11 AND pf7.feature_value_id = 27 AND pf8.feature_id = 62 AND pf8.feature_value_id = 1401 AND pf9.feature_id = 122 AND pf9.feature_value_id = 1864 AND pf10.feature_id = 92 AND pf10.feature_value_id = 1170 AND cp1.category_id IN(582,899)

Запрос формируется в классе shopProductsCollection в методе


 public function getFeatureValueIds()
    {
        $this->prepare();
        // add join
        $alias = $this->addJoin('shop_product_features');
        $sql = $this->getSQL();
        // remove join
        unset($this->joins[count($this->joins) - 1]);
        $sql = 'SELECT DISTINCT '.$alias.'.feature_id, '.$alias.'.feature_value_id '.$sql;
        $rows = $this->getModel()->query($sql);
        if (!$rows) {
            return array();
        }
        $result = array();
        foreach ($rows as $row) {
            $result[$row['feature_id']][] = $row['feature_value_id'];
        }
        return $result;
    }

Как его оптимизировать или в мускуле что-то поменять чтобы отрабатывал?

7 ответов

  • 1
    Genasyst 29 ноября 2016 18:24 #

    Вот еще похожая ситуация https://support.webasyst.ru/8737/ne-ponyatnyy-zapr...

  • 2
    Genasyst 1 декабря 2016 17:29 # Решение

    Помогла настройка конфига mysql my.cnf

    optimizer_search_depth = 0

    Подробнее тут: Оптимизация долгих запросов

  • 1
    sergfes 26 сентября 2018 11:56 #

    Добрый день!

    Та же ситуация  с медленными запросами. 

    Хостер не дает применить

    optimizer_search_depth = 0

     только покупка и переход VPS.

    Установка 

    'filters_features' => 'exists'

    только сильно усугубила проблему.

    Что еще можно сделать в моей ситуации.

  • 1
    sergfes 26 сентября 2018 12:01 #

    Примеры медленных запросов:

    SELECT DISTINCT p.*,p.id
    FROM shop_product p
    JOIN shop_category_products cp1
    ON p.id = cp1.product_id
    WHERE p.STATUS = 1
    AND cp1.category_id IN(676,675,674,672,671,677,679,682,683,690,1077,1078,1079,1080,1110,1119)
    ORDER BY p.id=p.id,p.total_sales DESC,IF(p.image_id IS NULL,0,1) DESC,1
    LIMIT 432,24
    UPDATE `shop_product_skus` SET `count`='2',`id`='16742',`product_id`='21166' WHERE id = '16742'
    REPLACE INTO shop_lastmodified_hash
    (`url`, `hash`, `date`) VALUES ('https://melagrocom.com/product/rychag-rsm-100415010-don1500/', '5766ac880159d4ca607456dc0d568965', '2018-09-14 15:42:33')
    SELECT p.*, r.sort
    FROM shop_promo AS p
    JOIN shop_promo_routes AS r
    ON p.id=r.promo_id
    WHERE r.storefront IN ('melagrocom.com/','melagrocom.com')
    AND type='link' AND p.enabled > 0
    ORDER BY r.sort, p.id


  • 1
    sergfes 28 сентября 2018 11:42 #

    Перенес свой вопрос в новую тему 

    Спасибо.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите