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 `address` ADD INDEX `address_idx_city` (`city`);
ALTER TABLE `payment` ADD INDEX `payment_idx_cancel_dat_customer_init` (`cancel_date`,`customer`,`init`);
ALTER TABLE `payment` ADD INDEX `payment_idx_customer` (`customer`);
SELECT
COUNT(a0_id) AS sclr0,
LOWER(a0_city) AS sclr1
FROM
(SELECT
a0_.id AS a0_id,
a0_.city AS a0_city
FROM
address a0_
WHERE
a0_.city IS NOT NULL
AND a0_.city <> ''
ORDER BY
NULL LIMIT 5) a0_
INNER JOIN
customer c1_
ON (
c1_.customer_address = a0_.a0_id
)
WHERE
1 = 1
AND 1 = 1
AND (
EXISTS (
SELECT
1
FROM
payment p2_
WHERE
(
p2_.init <> 1
AND p2_.unpaid <> 1
AND p2_.cancel_date IS NULL
AND (
p2_.value > 0
OR p2_.date BETWEEN '2011-03-23 00:00:00' AND '2011-03-23 23:59:59'
)
AND p2_.customer IS NOT NULL
)
AND (
c1_.id = p2_.customer
)
GROUP BY
p2_.customer
ORDER BY
NULL
)
)
GROUP BY
sclr1
ORDER BY
NULL LIMIT 5