Есть несложный запрос. Отлажен на тестовом сервере, потом запущен на боевом.
Разница в скорости - чудовищна (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