2013-05-03 5 views
0

J'ai trois bases de données, dans chaque base de données sont deux tables, pour faciliter l'interface pour les utilisateurs J'ai créé une vue sur ces 6 tables et ajouté une colonne dans la vue pour que l'utilisateur puisse toujours filtrer s'il/elle veut seulement certaines données. Cependant, je pense que la performance n'est pas aussi bonne qu'elle pourrait l'être. Je pense que même si la clause where définit que, par exemple, les données de db1 ne sont pas nécessaires, la vue récupère toutes les données en premier et effectue le filtrage. Comment puis-je rendre la vue suffisamment intelligente pour éviter d'obtenir les données de db1 dans le premier endroit dans une telle situation?Voir sur plusieurs bases de données, comment améliorer la vitesse?

Répondre

1

Ce que vous voulez est une vue partitionnée.

Vous créez ces en spécifiant des contraintes pour chacune des tables de la vue, donc sql server saurez ce que l'information est là sans avoir à le chercher:

-à-dire

-- On Server1: 
CREATE TABLE Customers_33 
    (CustomerID INTEGER PRIMARY KEY 
       CHECK (CustomerID BETWEEN 1 AND 32999), 
    ... -- Additional column definitions) 

-- On Server2: 
CREATE TABLE Customers_66 
    (CustomerID INTEGER PRIMARY KEY 
       CHECK (CustomerID BETWEEN 33000 AND 65999), 
    ... -- Additional column definitions) 

-- On Server3: 
CREATE TABLE Customers_99 
    (CustomerID INTEGER PRIMARY KEY 
       CHECK (CustomerID BETWEEN 66000 AND 99999), 
    ... -- Additional column definitions) 

explication complète ici: http://msdn.microsoft.com/en-us/library/aa933141(v=sql.80).aspx

Questions connexes