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

Откуда: Киев
Сообщений: 89
Доброго времени суток, чтобы проиндексировать представление
необходимо создать его с указанием WITH SCHEMABINDING, но в моём случае ругается на табличную функцию, текст, которой не могу переписать подзапросами для представления.

CREATE VIEW proba_view
WITH SCHEMABINDING as
SELECT T.ID, T.NAME, F.NODE from Table as T
CROSS APPLY fn.test_fn(T.ID) as F
........................................

Подскажите, если я сделаю ALTER для функции fn.test_fn с указанием WITH SCHEMABINDING это исправит проблему?
16 ноя 13, 19:26    [15141925]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Исправит. Но сделать это представление индексированным все равно не выйдет.
Подробности, как обычно, в документации.
16 ноя 13, 19:37    [15141939]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
invm, вот интересно., хоть кому-нибудь индексированные представления оказались полезными ? Сколько раз не пытался их применить, всегда натыкался на ограничения.
16 ноя 13, 20:56    [15142052]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Exproment,
ну их ведь создали не просто так, значит полезные. Просто у меня представление используется для приложения, в котором часто делают поиск по фамилии, индекс на таблицу строить не хочу, решил построить для представления, и в итоге ограничения ((
16 ноя 13, 21:03    [15142061]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
Roul_Duke
ну их ведь создали не просто так, значит полезные

это все вода. Интересует реальный пример их использования. Когда-то хотел с их помощью построить дополнительные не стандартные ограничения на изменение данных, но как подумал, что придется дублировать весь контент сразу желание отпало.
Roul_Duke
индекс на таблицу строить не хочу

не хочу - слишком гумманитарно звучит каковы причины ? чем вам не угодил индекс на таблице ?
16 ноя 13, 21:11    [15142071]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Exproment,
таблица слишком большая, в представлении по определённым условия используется только её часть. Решил что создавать индекс по nvarchar(250) для большой таблицы не православно, а для представления то что нужно ;)
я не прав?
16 ноя 13, 21:39    [15142100]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Exproment
хоть кому-нибудь индексированные представления оказались полезными ?
Например, хранение предрассчитанных агрегатов для вас полезно или нет?
16 ноя 13, 21:42    [15142103]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Roul_Duke
таблица слишком большая, в представлении по определённым условия используется только её часть.
Фильтрованный индекс.
16 ноя 13, 21:43    [15142107]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
invm,
т.е. ваш совет отказаться от индексированного представления и создать фильтрованный индекс на таблицу? =))
16 ноя 13, 21:46    [15142111]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
Roul_Duke, почитайте про отфильтрованные индексы. Sql server Довольно консервативен в плане их использования, но возможно они вам подойдут.
Roul_Duke
создавать индекс по nvarchar(250) для большой таблицы не православно

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

Только еще учитывайте вот что - создавая отфильтрованное представление вы уже дублируете данные в самом представлении + еще будете деблировать данные в индексе(есил только данное поле в индексе не будет кластеризованным).
16 ноя 13, 21:47    [15142112]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Exproment,

>>Только еще учитывайте вот что - создавая отфильтрованное представление вы уже дублируете данные в самом представлении + >>еще будете деблировать данные в индексе(есил только данное поле в индексе не будет кластеризованным).

ценное замечание)) но как вы видите выше дублировать индексы для поля FIO я не собирался ;) но суть вашего замечания я понял.

Хорошо, посмотрим в сторону Filtered Indexes. Спасибо.
16 ноя 13, 21:52    [15142121]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Exproment
invm, вот интересно., хоть кому-нибудь индексированные представления оказались полезными ? Сколько раз не пытался их применить, всегда натыкался на ограничения.


Например у тебя таблица в миллиард записей. Записи вставляются по ночью по 10 миллионов.
Зато днём у тебя 10 миллионов запросов на сколько и на какую сумму было выписано товаров в таком-то году.

Вот ты строишь агрегирующую вьюху, которая избавит этот запрос от обращения к таблице.
17 ноя 13, 00:07    [15142395]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
invm
Например, хранение предрассчитанных агрегатов для вас полезно или нет?

SandalTree
Вот ты строишь агрегирующую вьюху, которая избавит этот запрос от обращения к таблице.

Да, предваритальное агрегирование это полезно! :)

Может кто еще применял для иных целей ?
17 ноя 13, 00:31    [15142468]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Roul_Duke
Решил что создавать индекс по nvarchar(250) для большой таблицы не православно, а для представления то что нужно ;)

В чём, по-вашему, будет преимущество?

Вообще решения есть — всё зависит от того, как вы собираетесь использовать этот индекс. Например, если нужно только точное равенство, то можно построить индекс по хэшу этого nvarchar(250). Если нужен поиск по LIKE 'ABC%' — можно построить индекс, к примеру, по первым двадцати символам. И т.п.
18 ноя 13, 12:30    [15147252]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гость333
Если нужен поиск по LIKE 'ABC%' — можно построить индекс, к примеру, по первым двадцати символам. И т.п.

Имеете ввиду индекс по persisted вычисляемому полю ?
19 ноя 13, 16:46    [15155925]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
Гость333
Если нужен поиск по LIKE 'ABC%' — можно построить индекс, к примеру, по первым двадцати символам. И т.п.

Имеете ввиду индекс по persisted вычисляемому полю ?

Да вроде не обязательно persisted. Достаточно обычного вычисляемого поля.
19 ноя 13, 17:29    [15156375]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гость333
Да вроде не обязательно persisted. Достаточно обычного вычисляемого поля.

0_о с каких пор индекс можно построить по не persisted вычисляемому полю ?
19 ноя 13, 19:25    [15156951]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
с каких пор индекс можно построить по не persisted вычисляемому полю ?

Как минимум со времён MSSQL 2000.
19 ноя 13, 19:31    [15156972]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
o-o
Guest
Exproment,
create table big_char(s varchar(250), sub as left(s, 10))
create index ix_sub on big_char(sub)
-------------------------------------
Command(s) completed successfully.
19 ноя 13, 19:35    [15156988]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гость333, o-o, Всегда считал что только persisted можно индексировать. Fail.
19 ноя 13, 19:52    [15157067]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
Fail.

Фейл был бы, если б вы и дальше продолжали так считать. А узнавать что-то новое — это, наоборот, success.
19 ноя 13, 20:10    [15157137]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Гость333,
ок, спасибо за советы, но filtered это был мой случай ;)
21 ноя 13, 15:08    [15168801]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление, ошибка при создании WITH SCHEMABINDING  [new]
хмхм
Guest
Exproment
Может кто еще применял для иных целей ?


Очень удобно оказалось хранить в них гуиды и вычисляемое поле bigint, соответственно по одному полю кластерный индекс, по другому - обычный.
21 ноя 13, 17:33    [15170015]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить