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 events_idx_ends_on ON events (ends_on);
CREATE INDEX prices_idx_for_date ON prices (for_date);
SELECT
sp_for_date,
sp_value
FROM
((SELECT
sp.for_date AS sp_for_date,
sp.value AS sp_value
FROM
prices sp
INNER JOIN
events ev
ON (
(
(
ev.ends_on IS NULL
AND (
sp.for_date = (
SELECT
prices.for_date
FROM
prices
WHERE
prices.for_date <= ev.starts_on_j
AND prices.for_date > dateadd(prices.day, -14, ev.starts_on)
ORDER BY
prices.for_date DESC OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY
)
)
)
)
)
)
UNION
(
SELECT
sp.for_date AS sp_for_date,
sp.value AS sp_value
FROM
prices sp
INNER JOIN
events ev
ON (
(
(
ev.ends_on IS NOT NULL
AND (
sp.for_date = (
SELECT
prices.for_date
FROM
prices
WHERE
prices.for_date <= ev.ends_on
AND prices.for_date > ev.starts_on
ORDER BY
prices.for_date DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
)
)
)
)
)
)
) AS union1