0

J'ai une vue sur deux tables (stockées en utilisant SQL 2008) avec des millions d'enregistrements.Vue matérialisée ou CDC?

CREATE VIEW VwSalesAge 
AS 
    SELECT 
     Transactions.ID 
     ,Transactions.Amount 
     ,Customer.ID 
       ,Customer.Name 
     ,Customer.Age 
    FROM Transactions 
     INNER JOIN Customer 
      ON Transactions.CustomerID=Customer.ID 

Maintenant, je veux utiliser une table physique pour stocker ces informations pour éviter scannig de grandes tables pour les requêtes encore plus petites comme

SELECT * 
FROM VsSalesAge 
WHERE Customer.ID = 123 

Alors, qui est la meilleure approche en termes de performance.

  1. UTILISATION Change Data Capture sur les deux tableaux et identifier les changements et les appliquer sur la nouvelle table « TbSalesAge »
  2. Utilisez une vue matérialisée au lieu d'une table physique
  3. Une autre méthode (expliquer s'il vous plaît ...)

PS: Je ne ai pas besoin réplique en temps réel

+1

Quel est le problème avec est sous la forme normalisée actuelle? – TFD

+2

Étant donné la définition de la vue présentée, le 'SELECT' devrait retourner instantanément. Si ce n'est pas le cas, vous devez absolument regarder vos index. Un index de couverture sur «CustomerID, ID, montant» et «ID, nom, âge» devrait vous prendre un long chemin. –

+0

+ 1 pour le commentaire de Lieven, l'index sur Id devrait faire le travail – 2lazydba

Répondre

0

À mon humble avis, je pense que la meilleure approche serait d'utiliser une vue indexée. Vous aurez besoin de créer la vue avec l'option SCHEMABINDING et il y a quelques restrictions sur les colonnes calculées, les fonctions de regroupement, etc., mais je pense que cela vous donne l'unique objet consolidé avec les améliorations de performance avec l'indexation que vous recherchez.