Вопрос по запросам к БД. Фильтр версии 2.3.7.2. На локальном сервере все прекрасно, время отклика БД = 0.01 сек. На удаленном сервере - до 10-12 сек !!! Всего идет 5 запросов и 3 из них по 3 сек. остальные - 2 сек и 0.5 сек. Это вызов getProducts() по аякс. На локалке и в внешнем сервере все файлы и БД одинаковые. Один из запросов (первый) в готовом виде :
SELECT count(*) as total FROM (SELECT DISTINCT p.product_id, coalesce((SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1), (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1), p.price) as realprice FROM oc_product p LEFT JOIN oc_product_option_value pov ON (pov.product_id=p.product_id) LEFT JOIN oc_product_to_store p2s ON (p2s.product_id=p.product_id) LEFT JOIN oc_product_to_category p2c ON (p2c.product_id=p.product_id) WHERE 1 AND p2c.category_id = '2' AND EXISTS (select 1 FROM oc_product_option_value pov0 WHERE pov0.product_id=pov.product_id AND pov0.option_value_id IN(139,140,141,142,143,111)) AND p.price >=160 AND p.price <=520 AND p.status = '1' AND p.date_available <= NOW( ) AND p2s.store_id = 0) as innertable WHERE 1 AND realprice >=160 AND realprice <=520
Хостинг - Dominant Telecom. Тариф - "Оптимальный".
в базе порядка 500 товаров. Фильтрация по обуви - в категории 70 товаров + 10 размеров.
Проверил на другом сервере - ukraine.com.ua. Время уменьшилось до 3-5 сек.
Анализ запроса с помощью EXPLAIN показал, что на внешних серверах MySQL разбирают запрос почти одинаково, а на локалке - совсем по другому и в тысячи раз быстрее.
В архиве результат EXPLAIN на внешнем сервере и на локальном
запросы.zip
==========
Решение: Добавить индексы к столбцам тех таблиц, которые участвуют в секциях WHERE, ON и сравнениях.
Время уменьшилось до 0.1 сек и меньше.