Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Оптимизировать тяжелый SQL запрос (Помощь)


Рекомендованные сообщения

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

 

Старт: 

totalProcessTime - 2.6198439598083 sec
Queries - 63.  :mellow: ужас!!
Queries time - 2.5282192230225.

 

Вот запрос: (1.005) сек, это номер один в порядке оптимизация и скорей самый главный.

SELECT 
			DISTINCT *, 
			pd.name AS name,
			p.image, 
			m.name AS manufacturer, 
			(SELECT price FROM 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) AS discount, 
			(SELECT price FROM 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) AS special, (SELECT points FROM product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '1') AS reward, 
			(SELECT ss.name FROM stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '1') AS stock_status, (SELECT wcd.unit FROM weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '1') AS weight_class, 
			(SELECT lcd.unit FROM length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '1') AS length_class, 
			(SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews 
		FROM product p 
		LEFT JOIN product_description pd ON (p.product_id = pd.product_id) 
		LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) 
		LEFT JOIN manufacturer m ON (p.manufacturer_id = m.manufacturer_id) 
		WHERE 
			pd.language_id = '1' AND 
			p.status = '1' AND p.date_available <= NOW() AND 
			p2s.store_id = '0'ORDER BY RAND() LIMIT 5  

Номер два: (0.401)  с ним вроде боле менее понятно, разберемся.

SELECT r.review_id, r.answer, r.html_status, r.purchased, r.addimage, r.good, r.bads, r.author, r.rating, r.text, r.author, p.product_id, pd.name, p.image, r.date_added FROM review r LEFT JOIN product p ON (r.product_id = p.product_id) LEFT JOIN product_description pd ON (p.product_id = pd.product_id) WHERE p.date_available <= NOW() AND p.status = '1' AND r.status = '1' AND r.anonim = '2' AND pd.language_id = '1' ORDER BY date_added DESC LIMIT 10

Но первый для меня темный лес прошу помощи возможно решение уже существует, версия Opencart 1.5.4

-_-

 

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.