Добрый день.
есть некий запрос созданный неким разработчиком:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
explain extended
SELECT
DISTINCT *,
pd.name AS name,
p.image,
p.city as zone,
p.href as product_url,
p.product_id as product_id,
p.shipping_text as shipping_text,
p.payment_text as payment_text,
p.sort_order,
p.shipping as shipping,
p.sort_order,
v.partner,
v.store_url as out_href,
co.name as country,
(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 < '2016-08-24 11:45:00')
AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '2016-08-24 11:45:00'))
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 < '2016-08-24 11:45:00')
AND (ps.date_end = '0000-00-00' OR ps.date_end > '2016-08-24 11:45:00'))
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 pr.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 = '8') AS stock_status,
(SELECT wcd.unit FROM weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '8') AS weight_class,
(SELECT lcd.unit FROM length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '8') 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
INNER JOIN product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id)
INNER JOIN country co ON (p.country_id = co.country_id)
INNER JOIN vendor vv ON (vv.vproduct_id = p.product_id)
INNER JOIN vendors v ON (vv.vendor = v.vendor_id)
WHERE p.product_id = '337388'
AND pd.language_id = '8'
AND p.status = '1'
AND p.date_available <= '2016-08-24 11:45:00';
SHOW warnings;
который выдает такой вывод
http://shot.qip.ru/00PJSZ-2AD7h4cdS/
мне необходимо его оптимизировать. не вдаваясь в тонкие подробности. я как бы не привожу код запроса на создание таблиц, ибо не флудить (очень много коду будет). мне бы лишь тыкнуть на что смотреть и краткие рекомендации возникающие у опытных и умелых бд-шников с первого взгляда. ибо explain юзать не умею особо и не понимаю почему у меня несколько таблиц в table пишут NULL. что это означает? и что означают комментарии в Extra около них?
в целом вопрос хотел бы задать так: как проводится оптимизация запросов грамотно? какими инструментами, в какой последовательности, и т.д...
Спасибо.