Existe-t-il un moyen d'améliorer la requête ci-dessous?Se joindre à Union dans sql performance de suppression de requête
La requête ci-dessous donne un résultat correct, mais la performance est en train de disparaître.
Existe-t-il un moyen d'améliorer la requête ci-dessous?Se joindre à Union dans sql performance de suppression de requête
La requête ci-dessous donne un résultat correct, mais la performance est en train de disparaître.
Peut-être que quelque chose comme ça?
Select
ID,
max(case when MYDATE = '20160105 10:00:00' then PRICE else 0 end),
max(case when MYDATE = '20140805 10:00:00' then PRICE else 0 end),
max(case when MYDATE = '20170215 10:00:00' then PRICE else 0 end)
FROM
(
select ID, PRICE FROM TABLE1 WHERE MYDATE in ('20160105 10:00:00', '20140805 10:00:00', '20170215 10:00:00')
UNION ALL
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE in ('20160105 10:00:00', '20140805 10:00:00', '20170215 10:00:00')
) A
group by ID
Deviner serait plus facile si vous avez fourni des exemples ...
Vous pouvez éviter(), utilisez la A.ID pour rejoindre et cela pourrait produire un certain avantage pour la performance
Select A.ID, A.[2016 Price], B.[2014 Price], C.[2017 Price]
FROM
(
select ID, PRICE [2016 Price] FROM TABLE1 WHERE MYDATE = 2016-01-05 10:00:00
UNION
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE = 2016-01-05 10:00:00
) A
INNER JOIN
(
select ID, PRICE [2014 Price] FROM TABLE1 WHERE MYDATE = 2014-08-05 10:00:00
UNION
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE = 2014-08-05 10:00:00
) B ON A.ID =B.ID
INNER JOIN
(
select ID, PRICE [2017 Price] FROM TABLE1 WHERE MYDATE = 2017-02-15 10:00:00
UNION
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE = 2017-02-15 10:00:00
) ON A.ID =C.ID
Chaque requête individuelle est-elle également lente? avez-vous un index sur la colonne ID? BTW, je pense que vous devez utiliser PIVOT au lieu d'écrire une telle requête. – FLICKER
Vous devriez commencer par avoir des index sur l'ID et si vous ne vous attendez pas à ce que les ID dupliqués entre table1 et table2, vous puissiez remplacer Union par Union All – NotCaring
@FLICKER: Merci. J'ai un index sur ID. Est-ce possible grâce à Pivot. veuillez suggérer –