Сообщение Mssql: выбор данных из view с union all по линкам от 05.09.2018 8:38
Изменено 05.09.2018 9:44 rFLY
Mssql: выбор данных из view с union all по линкам
В БД есть view в которой объединены выборки из прилинкованных однотипных таблиц с других серверов. В каждой такой выборке есть поле с константой, по которой потом отбираются данные из нужной БД.
Примерный вид view:
Таких представлений несколько, в некоторых из них есть джойны с другими таблицами, но из той же бд, в некоторых условия выборки.
Данные из этих view отбираются:
Тут тоже могут быть дополнительные условия отбора или вьюха может быть приджойнена к другой таблице, но обязательно с указанием bd='bdN'
Читал, что sql сервер умный и при такой выборке будет работать только с нужной БД и таблицей. Так и есть, но в плане все равно какое-то время да тратится на определение из какой базы брать данные. Как-то это можно оптимизировать?
Примерный вид view:
Select 'bd1' as bd, field from link1.bd1.table
Union all
Select 'bd2' as bd, field from link2.bd2.table
Union all
И т.д
Таких представлений несколько, в некоторых из них есть джойны с другими таблицами, но из той же бд, в некоторых условия выборки.
Данные из этих view отбираются:
Select * from view1 where bd = 'bd2'
Тут тоже могут быть дополнительные условия отбора или вьюха может быть приджойнена к другой таблице, но обязательно с указанием bd='bdN'
Читал, что sql сервер умный и при такой выборке будет работать только с нужной БД и таблицей. Так и есть, но в плане все равно какое-то время да тратится на определение из какой базы брать данные. Как-то это можно оптимизировать?
Кусочек плана | |
Mssql: выбор данных из view с union all по линкам
В БД есть view в которой объединены выборки из прилинкованных однотипных таблиц с других серверов. В каждой такой выборке есть поле с константой, по которой потом отбираются данные из нужной БД.
Примерный вид view:
Таких представлений несколько, в некоторых из них есть джойны с другими таблицами, но из той же бд, в некоторых условия выборки.
Данные из этих view отбираются:
Тут тоже могут быть дополнительные условия отбора или вьюха может быть приджойнена к другой таблице, но обязательно с указанием bd='bdN'
Читал, что sql сервер умный и при такой выборке будет работать только с нужной БД и таблицей. Так и есть, но в плане все равно какое-то время да тратится на определение из какой базы брать данные (но, это только тогда, когда в условии bd сравнивается с переменной, если заменить на where bd = 'bd2' такого не происходит). Как-то это можно оптимизировать? Пробовал OPTION ( OPTIMIZE FOR (@bd UNKNOWN)), не помогло.
Примерный вид view:
Select 'bd1' as bd, field from link1.bd1.table
Union all
Select 'bd2' as bd, field from link2.bd2.table
Union all
И т.д
Таких представлений несколько, в некоторых из них есть джойны с другими таблицами, но из той же бд, в некоторых условия выборки.
Данные из этих view отбираются:
delcare @bd varchar(5) = 'bd2'
Select * from view1 where bd = @bd
Тут тоже могут быть дополнительные условия отбора или вьюха может быть приджойнена к другой таблице, но обязательно с указанием bd='bdN'
Читал, что sql сервер умный и при такой выборке будет работать только с нужной БД и таблицей. Так и есть, но в плане все равно какое-то время да тратится на определение из какой базы брать данные (но, это только тогда, когда в условии bd сравнивается с переменной, если заменить на where bd = 'bd2' такого не происходит). Как-то это можно оптимизировать? Пробовал OPTION ( OPTIMIZE FOR (@bd UNKNOWN)), не помогло.
Кусочек плана | |