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:
CREATE INDEX product_idx_visible_sku ON PRODUCT (visible,SKU);
CREATE INDEX product_category_idx_sku ON PRODUCT_CATEGORY (sku);
CREATE INDEX product_properties_idx_property_id_value ON product_properties (property_id,value);
SELECT
*
FROM
(SELECT
COUNT(*) AS countme,
a_string_value,
a_name,
a_property_id,
a_category_id
FROM
(SELECT
a_string_value,
a_name,
a_property_id,
b_product_id,
a_category_id
FROM
((SELECT
DISTINCT a.string_value AS a_string_value,
a.name AS a_name,
a.property_id AS a_property_id,
b.product_id AS b_product_id,
a.category_id AS a_category_id
FROM
filter_criterias a
JOIN
product_properties b
ON (
a.property_id = b.property_id
AND (
(
isnumber(b.value) IS NOT NULL
AND isnumber(a.range_bottom) IS NOT NULL
AND isnumber(a.range_top) IS NOT NULL
AND (
a.range_bottom <= a.range_top
AND b.value >= a.range_bottom
AND b.value <= a.range_top
)
)
)
)
JOIN
PRODUCT_CATEGORY prc
ON (
prc.sku = b.product_id
AND prc.category_id = a.category_id
)
JOIN
PRODUCT pr
ON (
b.product_id = pr.SKU
AND pr.visible = '1'
))
UNION
DISTINCT (SELECT
DISTINCT a.string_value AS a_string_value,
a.name AS a_name,
a.property_id AS a_property_id,
b.product_id AS b_product_id,
a.category_id AS a_category_id
FROM
filter_criterias a
JOIN
product_properties b
ON (a.property_id = b.property_id
AND ((isnumber(b.value) IS NOT NULL
AND isnumber(a.range_bottom) IS NOT NULL
AND isnumber(a.range_top) IS NOT NULL
AND (a.range_bottom > a.range_top
AND b.value >= a.range_bottom))))
JOIN
PRODUCT_CATEGORY prc
ON (prc.sku = b.product_id
AND prc.category_id = a.category_id)
JOIN
PRODUCT pr
ON (b.product_id = pr.SKU
AND pr.visible = '1'))
) AS union1
)
GROUP BY
(a_string_value,
a_name,
a_property_id,
a_category_id)
UNION
SELECT
COUNT(*) AS countme,
string_value,
name,
property_id,
category_id
FROM
(SELECT
DISTINCT a.string_value,
a.name,
a.property_id,
b.product_id,
a.category_id
FROM
filter_criterias a
JOIN
product_properties b
ON (
a.property_id = b.property_id
AND (
(
a.name = b.value
)
)
)
JOIN
PRODUCT_CATEGORY prc
ON (
prc.sku = b.product_id
AND prc.category_id = a.category_id
)
JOIN
PRODUCT pr
ON (
b.product_id = pr.SKU
AND pr.visible = '1'
))
GROUP BY
(string_value,
name,
property_id,
category_id))
ORDER BY
5,
4,
3,
2