J'ai une requête SQL que je veux optimiser en tant que requête interne d'un SP.Optimisation d'une requête SQL
SELECT TOP 1 @CurrentStartDate = Strt_Dt FROM (
SELECT 1 AS seq, Stat, Strt_Dt, Est_Hrs_Comp, EndDate, Tckt_Id, Envr
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID AND stat = 'INPR'
UNION
SELECT TOP 1 2 AS seq, Stat, Strt_Dt, Est_Hrs_Comp, EndDate, Tckt_Id, Envr
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID AND stat = 'CMPL'
ORDER BY enddate DESC
UNION
SELECT TOP 1 3 AS seq, Stat, Strt_Dt, Est_Hrs_Comp, EndDate, Tckt_Id, Envr
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID AND stat = 'PLND'
ORDER BY strt_dt
UNION
SELECT 4 AS seq, 'UNP', NULL, NULL, NULL, tckt_id, 'Unplanned'
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID
) aa
ORDER BY aa.seq
Existe-t-il une meilleure façon d'utiliser cette requête? J'ai besoin de cela car j'ai beaucoup de logique ayant le même type.
La première sous-requête devrait-elle avoir une clause 'ORDER BY'? Est-ce que la dernière sous-requête devrait avoir une clause WHERE supplémentaire, sinon elle semble inclure tous les enregistrements inclus dans les requêtes précédentes? Et pouvez-vous montrer quelques données pour clarifier ce qui est et ce qui n'est pas exclu en utilisant ces «TOP 1»? – MatBailie
*** SQL *** est juste le * Structured Query Language * - une langue utilisée par de nombreux systèmes de bases de données, mais pas un produit de base de données ... optimisations sont très spécifiques au vendeur - nous avons donc vraiment besoin de savoir quelle ** base de données système ** (et quelle version) vous utilisez .... –
Il serait également utile d'ajouter ce que vous essayez d'obtenir en anglais - il est plus facile d'aider et de résoudre un problème si vous l'expliquez. Qu'est-ce que la requête est censée faire, qu'est-ce qu'elle ne fait pas? Quels sont les problèmes de performance? (Je suppose que les UNIONS sont le problème principal) – Charleh