J'essaie d'optimiser une procédure stockée pour améliorer les performances globales. Actuellement, la conception a plusieurs tables temporaires avec la dernière colonne conçue pour effectuer des fonctions d'agrégat (telles que SUM) sur les champs dont elle tire des données.Optimisation de la procédure stockée qui utilise plusieurs tables temporaires pour joindre et générer des données
Par exemple:
CREATE TABLE #TBL_Refunds (CurrencyID int, DateValue DATETIME, Refunds decimal(18,2))
CREATE TABLE #TBL_Fees (CurrencyID int, DateValue DATETIME, Fees decimal(18,2))
CREATE TABLE #TBL_Deposits (CurrencyID int, DateValue DATETIME, Deposits decimal(18,2))
CREATE TABLE #TBL_Cancellations (CurrencyID int, DateValue DATETIME, Cancellations decimal(18,2))
Un exemple de l'une des fonctions d'agrégat effectué sur le dernier champ de l'une des tables temporaires ressemble à ce qui suit:
INSERT #TBL_Cancellations(currencyID, DateValue, Cancellations)
SELECT C.CurrencyID, C.Date, SUM(T.Amount) - SUM(T.Debit)
FROM Currency C
JOIN Transaction T ON C.CurrencyId = T.CurrencyId
-- More conditions here . . .
GROUP BY C.CurrencyId, C.Date
Les sorties de sélection finale de la agréger le champ de chaque table temporaire et utilise un LEFT JOIN pour faire correspondre chacun d'entre eux.
Par exemple.
SELECT DISTINCT
C.CurrencyCode 'Currency Code',
C.ConversionRate 'Conversion Rate',
R.Refunds,
F.Fees 'Fees',
D.Deposits 'Desposits'
-- More here . . .
FROM
#TBL_Refunds (CurrencyID int, DateValue DATETIME, Refunds decimal(18,2)) R
LEFT JOIN
Currency C ON R.CurrencyID = C.CurrencyID
LEFT JOIN
#TBL_Fees F ON F.CurrencyID = C.CurrencyID
LEFT JOIN
#TBL_Deposits D ON D.CurrencyID = C.CurrencyID
-- More JOINS here. . .
Y a-t-il une meilleure conception pour résoudre ce problème sans l'utilisation de tables temporaires? Y a-t-il une approche plus moderne pour résoudre ce problème?
Je suis relativement nouveau dans l'écriture de procédures stockées et SQL, donc toute aide serait géniale.
Merci!
'Y a-t-il une meilleure conception pour résoudre ce problème' - quel problème? Vos morceaux de SQL ne décrivent aucun des problèmes de performance possibles. La clé de l'optimisation est l'analyse des goulots d'étranglement. En avez-vous détecté? –