In case you have your own slow SQL query, you can optimize it automatically here.
For the query above, the following recommendations will be helpful as part of the SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `Customers` ADD INDEX `customers_idx_company_ip` (`Company`,`IP`);
ALTER TABLE `Printers` ADD INDEX `printers_idx_serialnumber` (`SerialNumber`);
ALTER TABLE `es_temp2` ADD INDEX `es_temp2_idx_remain_yellow` (`Remain_Toner_Yellow`);
ALTER TABLE `es_temp3` ADD INDEX `es_temp3_idx_serialnumber_remain_yellow` (`SerialNumber`,`Remain_Toner_Yellow`);
ALTER TABLE `es_temp5` ADD INDEX `es_temp5_idx_serialnumber` (`SerialNumber`);
SELECT
a_id,
T,
a_serialnumber,
p_model,
BeforeCountBlack,
AfterCountBlack,
BeforeCountCyan,
AfterCountCyan,
BeforeCountMagenta,
AfterCountMagenta,
BeforeCountYellow,
AfterCountYellow
FROM
((SELECT
a.ID AS a_id,
DATE_FORMAT(a.Time,
'%d/%m/%y') AS T,
a.SerialNumber AS a_serialnumber,
p.Model AS p_model,
b.Remain_Toner_Black BeforeCountBlack,
a.Remain_Toner_Black AfterCountBlack,
b.Remain_Toner_Cyan BeforeCountCyan,
a.Remain_Toner_Cyan AfterCountCyan,
b.Remain_Toner_Magenta BeforeCountMagenta,
a.Remain_Toner_Magenta AfterCountMagenta,
b.Remain_Toner_Yellow BeforeCountYellow,
a.Remain_Toner_Yellow AfterCountYellow
FROM
es_temp2 a
INNER JOIN
es_temp3 b
ON a.SerialNumber = b.SerialNumber
AND a.RowNumber = b.RowNumber + 1
INNER JOIN
Printers p
ON a.SerialNumber = p.SerialNumber
INNER JOIN
Customers c
ON p.IP = c.IP
AND c.Company = 5
WHERE
(
b.Remain_Toner_Yellow < a.Remain_Toner_Yellow
AND 1 = 1
))
UNION
DISTINCT (SELECT
a.ID AS a_id,
DATE_FORMAT(a.Time,
'%d/%m/%y') AS T,
a.SerialNumber AS a_serialnumber,
p.Model AS p_model,
b.Remain_Toner_Black BeforeCountBlack,
a.Remain_Toner_Black AfterCountBlack,
b.Remain_Toner_Cyan BeforeCountCyan,
a.Remain_Toner_Cyan AfterCountCyan,
b.Remain_Toner_Magenta BeforeCountMagenta,
a.Remain_Toner_Magenta AfterCountMagenta,
b.Remain_Toner_Yellow BeforeCountYellow,
a.Remain_Toner_Yellow AfterCountYellow
FROM
es_temp4 a
LEFT JOIN
es_temp5 b
ON a.SerialNumber = b.SerialNumber
AND a.RowNumber = b.RowNumber + 1
INNER JOIN
Printers p
ON a.SerialNumber = p.SerialNumber
INNER JOIN
Customers c
ON p.IP = c.IP
AND c.Company = 5
WHERE
(b.Remain_Toner_Black < a.Remain_Toner_Black
AND b.Remain_Toner_Black >= 0)
OR (b.Remain_Toner_Cyan < a.Remain_Toner_Cyan
AND b.Remain_Toner_Cyan >= 0)
OR (b.Remain_Toner_Magenta < a.Remain_Toner_Magenta
AND b.Remain_Toner_Magenta >= 0))
) AS union1