2013-05-03 1 views
0

У меня есть три базы данных, в каждой базе данных две таблицы, чтобы упростить интерфейс для пользователей. Я создал представление по этим 6 таблицам и добавил для базы данных и таблицы столбец в представлении, чтобы пользователь мог фильтровать если он/она хочет только определенные данные. Однако я чувствую, что производительность не так хороша, как могла бы быть. Я чувствую, что хотя предложение where определяет, что, например, данные из db1 не нужны, представление сначала извлекает все данные и выполняет фильтрацию. Как я могу сделать представление достаточно умным, чтобы избежать получения данных из db1 в frist месте в такой ситуации?Просмотр нескольких баз данных, как улучшить скорость?

ответ

1

Что вы хотите, это секционированный вид.

Вы создаете эти указав ограничения для каждой из таблиц в представлении, поэтому SQL Server будет знать, какая информация есть без извлечения его:

т.е.

-- 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) 

Полное объяснение здесь: http://msdn.microsoft.com/en-us/library/aa933141(v=sql.80).aspx

Смежные вопросы