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 `ATTRIBUTE_VALUES` ADD INDEX `attribute_values_idx_attribute_code_id` (`ATTRIBUTE_CODE`,`ID`);
ALTER TABLE `PRODUCTS` ADD INDEX `products_idx_ean_is_draft` (`EAN`,`IS_DRAFT`);
SELECT
count(*) COUNT_PRODUCTS
FROM
(SELECT
d.ID,
d.EAN,
d.NAME,
d.SAP_CATEGORY_ID,
d.SAP_VENDOR_ID,
d.RELEASE_DATE,
d.REMOVED_DATE,
d.IS_DRAFT,
d.DATA_STATE,
d.gc,
ATTRIBUTE_CODE AS ATTRIB_NAME,
ATTRIBUTE_VALUE AS APP_STATUS
FROM
(SELECT
b.ID,
b.EAN,
b.NAME,
b.SAP_CATEGORY_ID,
b.SAP_VENDOR_ID,
b.RELEASE_DATE,
b.REMOVED_DATE,
b.IS_DRAFT,
b.DATA_STATE,
GROUP_CONCAT(pl.LIFECYCLE_VALUE) gc
FROM
(SELECT
a.ID,
a.EAN,
a.NAME,
a.SAP_CATEGORY_ID,
a.SAP_VENDOR_ID,
a.RELEASE_DATE,
a.REMOVED_DATE,
a.IS_DRAFT,
a.DATA_STATE
FROM
(SELECT
p.ID,
p.EAN,
p.NAME,
p.SAP_CATEGORY_ID,
p.SAP_VENDOR_ID,
p.RELEASE_DATE,
p.REMOVED_DATE,
p.IS_DRAFT,
p.DATA_STATE
FROM
PRODUCTS AS p
ORDER BY
p.EAN,
p.IS_DRAFT) AS a
GROUP BY
a.EAN
ORDER BY
NULL) AS b
LEFT JOIN
PRODUCT_LIFECYCLE_STATES pl
ON pl.PRODUCT_ID = b.ID
GROUP BY
b.ID
ORDER BY
NULL) AS d
LEFT JOIN
PRODUCT_ATTRIBUTE_VALUES AS PRODAV
ON d.ID = PRODAV.PRODUCT_ID
AND EXISTS (
SELECT
1
FROM
ATTRIBUTE_VALUES
WHERE
(
ATTRIBUTE_VALUES.ATTRIBUTE_CODE = 'APPROVED_ATTRIBUTES'
)
AND (
PRODAV.ATTRIBUTE_VALUE_ID = ATTRIBUTE_VALUES.ID
)
)
LEFT JOIN
ATTRIBUTE_VALUES AS ATVALS
ON PRODAV.ATTRIBUTE_VALUE_ID = ATVALS.ID
AND ATVALS.ATTRIBUTE_CODE = 'APPROVED_ATTRIBUTES'
ORDER BY
d.SAP_CATEGORY_ID,
d.NAME) f