Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 View с выбором из разных таблиц по условию  [new]
Fantasy0R
Member

Откуда:
Сообщений: 6
Добрый день.
История банальна: разрослись таблицы, нужно секционирование, энтерпрайз купить нельзя ... придётся выкручиваться.
Для начала разбиваем таблицу (на самом деле их несколько штук) на 2 с постфиксами _Arch и _Oper. Т.к. нет возможности переписать все представления, хранимки и код в клиенте для обращения с новыми таблицами, нужно создать представление с именем как у таблицы до секционирования, совершить подмену. Переписать внешние ключи на триггеры это второе дело.

А пока вопрос: Нужно создать хитрое представление (View), чтоб оно сначала проверяло в оперативных данных и если записи в них нет обращалось в архивные, т.к. 80-90% обращений к View будет с целью работы с оперативными данными, то скорость выполнения запросов должна увеличиться. Вопрос как сделать ветвление при выбооре?

Во-первых, нужно как-то узнать по каким критериям where обращаются к view чтоб можно было выбрать с теми же условиями из оперативной таблицы и проверить есть ли запись:
exists (select * from t_Oper where ??? )

Во-вторых, как условие выбора таблицы поместить в from? "псевдокод"
select *
from 
(
    if exists (select * from t_Oper where ??? )
        select * from t_Oper where ??? 
    else
        select * from t_Arch where ??? 


)

А если к view обращаются без where, то нужно делать Union

Такой сценарий для view возможно разработать?
1 июл 13, 13:07    [14504701]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Fantasy0R,

не знаю, можно ли создать секционированное представление в Вашей версии сервера,
но если можно, то почитайте же документацию, и вопросы отпадут:

Требования к созданию секционированных представлений

Обратите внимание на замечания относительно CHECK CONSTRAINT
1 июл 13, 13:15    [14504768]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
Fantasy0R
Member

Откуда:
Сообщений: 6
iap,

нет, в стандарт эдишн sql server нельзя создавать. Пытался - sql server сказал, что нужен энтерпрайз
" энтерпрайз купить нельзя ... придётся выкручиваться "


В энтерпрайзе при нормальном секционировании, не нужно пракически ни о чём думать, только правильные границы функции секционирования выбрать и всё. Ни с ключами проблем нет, ни с представлениями. Таблица как была так и остаётся.
1 июл 13, 13:32    [14504887]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Fantasy0R
iap,

нет, в стандарт эдишн sql server нельзя создавать. Пытался - sql server сказал, что нужен энтерпрайз
" энтерпрайз купить нельзя ... придётся выкручиваться "


В энтерпрайзе при нормальном секционировании, не нужно пракически ни о чём думать, только правильные границы функции секционирования выбрать и всё. Ни с ключами проблем нет, ни с представлениями. Таблица как была так и остаётся.
Вообще-то, я про индексированное представление, а не таблицу, ссылку дал.
Разные вещи. Например, представление может работать
и с таблицами на разных серверах (называется "федеративные сервера", если не ошибаюсь).
Для него не нужны функции секционирования. Но наверно и редакция сервера всё равно Enterprise требуется?
Я почему не уверен? Потому что у нас везде Enterprise Edition. И я об этом не задумываюсь :)
1 июл 13, 13:55    [14505080]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
iiyama
Member

Откуда:
Сообщений: 642
Я бы сначала определил бы критерий по которому определяется в какой секции находятся данные, а то критерий - "поищем там если там нету", вызывает мысли "о сырОм" подходе
1 июл 13, 14:01    [14505125]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
Fantasy0R
Member

Откуда:
Сообщений: 6
iiyama,

критерий как и практически везде в таких случаях: "дата" (оперативные и архивные данные _Oper _Arch) . Записи старше X-дней переносятся из _Oper в _Arch.

Система старая, пятилетку уже отметила, проблема в том, что систему вне этих таблиц никто менять не даст и => у запросов к View, которая заменит таблицу, будут чаше всего в where ID, и другим полям, которые есть сейчас. О новом поле секционирования (повторюсь: секционирования в прямом смысле поддерживаемого SQL Server нет, употребляю данный термин т.к. он описывает, что хочется сделать) вся система знать не будет. Тайной о том, что данные хранятся в нескольких таблицах будет владеть только view, которая будет называться как сейчас таблица, а старая таблица разделится на _Arch и _Oper.
1 июл 13, 14:33    [14505404]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
iap
Fantasy0R
В энтерпрайзе при нормальном секционировании, не нужно пракически ни о чём думать, только правильные границы функции секционирования выбрать и всё. Ни с ключами проблем нет, ни с представлениями. Таблица как была так и остаётся.
Вообще-то, я про индексированное представление, а не таблицу, ссылку дал.
Разные вещи. Например, представление может работать и с таблицами на разных серверах (называется "федеративные сервера", если не ошибаюсь).
Для редакции сервера ниже Enterprise существует ограничение для distributed partitioned view - они не обновляемые. А обновляемые локальные partitioned view доступны даже на Express...
1 июл 13, 14:37    [14505432]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
Fantasy0R
Member

Откуда:
Сообщений: 6
iap
я про индексированное представление, а не таблицу, ссылку дал.


Видимо Вы имели ввиду Создание индексированных представлений
Ваша ссылка ведёт на простое "create view"
1 июл 13, 14:49    [14505519]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Fantasy0R
iap
я про индексированное представление, а не таблицу, ссылку дал.


Видимо Вы имели ввиду Создание индексированных представлений
Ваша ссылка ведёт на простое "create view"
Спуститесь по тексту ниже, пока не встретите название моей ссылки.
1 июл 13, 14:50    [14505531]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
Fantasy0R
пропущено...


Видимо Вы имели ввиду Создание индексированных представлений
Ваша ссылка ведёт на простое "create view"
Спуститесь по тексту ниже, пока не встретите название моей ссылки.
Ну хорошо, можно спуститься до подзаголовка "Секционированные представления"
1 июл 13, 14:52    [14505544]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
Fantasy0R
Member

Откуда:
Сообщений: 6
Это всё очень хорошо и примеры секционирования есть.

Но суть в том, что оно не работает: план выполнения запросов показывает, что представление всё равно смотрит все таблицы, а не одну, если в запросе к этому представлению отсутствует "where col_секционирования >(<, =, ...) Х".

А в случае изменения уже имеющейся системы (БД + клиентское ПО) такого выражения никогда не будет т.к. поле секционирования новое для таблиц.

Именно поэтому я и интересуюсь, можно ли реализовать в представлении алгоритм: сначала посмотреть в оперативных данных (80% обращений именно к оперативным данным) и если не найдена запись, смотреть уже в архивных.
1 июл 13, 15:23    [14505720]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Fantasy0R,
можно так попробовать, но не знаю, выполниться ли проверка на not exists() первой или нет
select
*
from t_Oper
where ...
union all
select *
from t_Arch
where  not exists(select 1 from t_Oper where ...)
and
...
1 июл 13, 16:06    [14505924]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Fantasy0R
Во-первых, нужно как-то узнать по каким критериям where обращаются к view чтоб можно было выбрать с теми же условиями из оперативной таблицы и проверить есть ли запись:


Такой сценарий для view возможно разработать?


ЕМНИП, нельзя
1 июл 13, 16:07    [14505934]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Fantasy0R
Но суть в том, что оно не работает: план выполнения запросов показывает, что представление всё равно смотрит все таблицы, а не одну, если в запросе к этому представлению отсутствует "where col_секционирования >(<, =, ...) Х".
Чудес не бывает.
Поставьте себя на место сервера.
1 июл 13, 16:16    [14506001]     Ответить | Цитировать Сообщить модератору
 Re: View с выбором из разных таблиц по условию  [new]
Fantasy0R
Member

Откуда:
Сообщений: 6
я подозревал о невозможности, но хотелось подтверждений. Спасибо.
1 июл 13, 16:18    [14506015]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить