Задать вопрос
Adamos
@Adamos

Разница в скорости выполнения запроса — можно ли исправить?

Есть несложный запрос. Отлажен на тестовом сервере, потом запущен на боевом.
Разница в скорости - чудовищна (0.0009 сек. против 6.6190 сек.)
Как я понимаю, причина - в версии MySQL (5.6 на тестовом сервере, 5.5 на боевом).
Ну, хостер еще мог накатить фирменные тормозилки от Intel для штопания модных дыр.
Поменять версию я не могу - шаред. Есть ли тут какие-то возможности по оптимизации?
Объем-то еще смешной, а скорость уже ни к черту.
Запрос
SELECT client_id, SUM(cost - IFNULL(p_price, 0)) AS debt
FROM (
SELECT * FROM orders WHERE pay_till <= '2017-12-31'
) AS orders LEFT JOIN (
SELECT order_id, SUM(summa) as p_price FROM payments WHERE date <= '2017-12-31' GROUP BY order_id
) AS p ON p.order_id = orders.id
GROUP BY client_id HAVING ABS(debt) > 0.01

EXPLAIN на тестовом сервере
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
1 	PRIMARY 	<derived2> 	ALL 	NULL	NULL	NULL	NULL	21056 	Using temporary; Using filesort
1 	PRIMARY 	<derived3> 	ref 	<auto_key0> 	<auto_key0> 	4 	orders.id 	10 	NULL
3 	DERIVED 	payments 	index 	order_id 	order_id 	4 	NULL	17284 	Using where
2 	DERIVED 	orders 	ALL 	NULL	NULL	NULL	NULL	21056 	Using where

EXPLAIN на боевом сервере
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra 	
1 	PRIMARY 	<derived3> 	ALL 	NULL	NULL	NULL	NULL	14606 	Using temporary; Using filesort
1 	PRIMARY 	<derived2> 	ALL 	NULL	NULL	NULL	NULL	11417 	
3 	DERIVED 	orders 	ALL 	NULL	NULL	NULL	NULL	21152 	Using where
2 	DERIVED 	payments 	index 	NULL	order_id 	4 	NULL	16302 	Using where
  • Вопрос задан
  • 305 просмотров
Подписаться 2 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы