Большой запрос

Не подскажите кто создает такой запрос, и почему не пользуется лимитами?

SELECT DISTINCT pf2.feature_id, pf2.feature_value_id FROM shop_product p
    JOIN shop_product_skus ps1
        ON ps1.product_id = p.id
    JOIN shop_product_features pf1
        ON p.id = pf1.product_id AND pf1.feature_id = 3
    JOIN shop_category_products cp1
        ON p.id = cp1.product_id
    JOIN shop_product_features pf2
        ON p.id = pf2.product_id
WHERE ps1.available > 0 AND ps1.status
    AND pf1.feature_value_id IN (1534,1552) AND (pf1.sku_id IS NULL OR pf1.sku_id = ps1.id)
    AND p.status = 1
    AND cp1.category_id IN(2730,1799,1891,2650,1607,1123,1667,2025,1999,2757,2019,2113,2752,1901,2008,1677,2127,1763,2062,1678,2158,1090,1989,1960,2021,1094,1681,1006,1680,1676,1125,2024,2026,1936,1944,1600,2153,1801,1581,2120,1755,2027,1915,1932,2064,2228,1890,1147,2747,1122,1126,2308,2307,2309,2300,1894,2206,1679,1121,1951,1902,2142,2649,1898,1010,1922,1008,1016,2066,1590,1926,2293,1378,1895,2253,1897,1937,1941,2648,918,919,1112,1230,2203,2056,2036,2328,944);

Просто есть подозрение, что это после обновления шоп-скрипта, и это базовый код на вывод в категории: товаров с разнообразной выборкой.

Может как то ограничить его, а то в категории, всё равно более 100 товаров, вряд ли кто-то выводит за раз без Пагинации? В базовый код не хотелось бы лезть. На сайте еще установлен фильтры по Ajax, и на больших выборках, тушите свет, сайт просто помирает.

Просто при лимите в 500 записей, у меня он отрабатывается за 0.2 сек при лимите 1000 и более, а на выходе 7700 записей, его время выполнения  от 10 секунд и выше. При меньших лимитах 100, вывод занимает 0,026 сек.

Товаров в базе: 18 тысяч, вариаций товаров 132 тысячи, типов характеристик 170, их вариаций около 30 тысяч.

Уточнение, если важно: shop_product: 18246 записей; shop_product_skus: 152280; shop_product_features: 550397; shop_category_products: 94195.

Оптимизация и очистка - сделаны, все таблицы оптимизированы, лишних записей, что указано выше нет.

Полный запрос, длиться примерно 7 секунд, перебирает около 124 млн. записей, не плохо бы его либо переделать, либо решить через создание временных таблиц, благо на сервере они строятся в оперативную память.

2 ответа

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

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