Индексировать данные, которые существуют в нескольких таблицах - PullRequest
0 голосов
/ 08 октября 2011

Я хочу запросить некоторые данные в нескольких таблицах, как если бы это была одна таблица.Есть около 10 таблиц, все с разными столбцами, но с 5 соответствующими столбцами.В идеале я бы перепроектировал таблицы так, чтобы общие столбцы вошли в одну таблицу, и тогда я мог бы создать отношения между другими таблицами.К сожалению, это не вариант, так как я не могу изменить существующие таблицы.

Каков наилучший подход для доступа и индексации данных?Я думал о создании представления или хранимой процедуры с помощью UNION ALLs, например,

SELECT COL1, COL2, COL3 FROM TABLE1
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE2
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE3
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE4

Но тогда как мне индексировать это?Будет ли просмотр или хранимая процедура лучше?Или, может быть, совершенно другой подход?

Ответы [ 2 ]

0 голосов
/ 08 октября 2011

Просмотр с союзом все сделают свою работу.Вы должны индексировать отдельные таблицы, которые участвуют в представлении.На самом деле это может повысить производительность (оптимизатор может выяснить, что некоторые таблицы не нужно сканировать в определенных запросах).

Хранимый процесс означает сложности, поскольку его не так просто использовать в предложении from (но все же возможно с OPENQUERY, например, «SELECT * FROM OPENQUERY» (YourServer, «SET FMT_ONLY OFF EXECved_proc»)).Он работает лучше, когда для генерации ваших результатов используется некоторая процедурная логика (например, сложный отчет).

0 голосов
/ 08 октября 2011

SQL Server имеет индексированных представлений , но не поддерживает UNIONs в представлении.

Если вам нужно запрашивать данные по всем таблицам, как если бы они были одной, и вы не можете изменить текущую схему, тогда я бы предложил использовать триггеры для поддержки еще одной таблицы, которая может быть проиндексирована и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...