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

Откуда: Киров, Россия
Сообщений: 1119
Есть табличка типа примерно такой структуры

CREATE TABLE ds2(
	[id] [INT] IDENTITY(1,1) NOT NULL,
	[idschet] [INT] NOT NULL,
	[idcase] [INT] NOT NULL,
	[DS2] [VARCHAR](10) NOT NULL,
 CONSTRAINT [PK.ds2] PRIMARY KEY NONCLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


Хочется сделать индексированную вьюшку типа idschet, idcase, (составная строка всех значений DS2) через запятую для пары значений idschet и idcase

Саму вьюшку WITH SCHEMABINDING сделать проблемы нет, проблема при попытке создать кластерный индекс на эту вьюшку, так как строку собираю подзапросом на основе XML, и кластеризованный индекс соответственно создать не дает. Можно как-то переделать запрос так чтобы была возможность создать необходимый мне кластерный индекс?
3 авг 18, 12:47    [21628030]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
uaggster
Member

Откуда:
Сообщений: 809
энди, никак не создашь.
Индексированные представления - достаточно жестко лимитированная конструкция.
ХМЛ подзапросы, к сожалению туда не ложатся.

https://docs.microsoft.com/ru-ru/sql/relational-databases/views/create-indexed-views?view=sql-server-2017
3 авг 18, 13:01    [21628103]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
лолл
Member

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

быть может проще создать тогда таблицу, а не индексированное представление?
3 авг 18, 13:32    [21628245]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
В MSSQL-2017 появилась агрегатная функция STRING_AGG().
Её, наверно, можно применять в индексированном представлении
3 авг 18, 13:56    [21628348]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
aleks222
Member

Откуда:
Сообщений: 920
iap
В MSSQL-2017 появилась агрегатная функция STRING_AGG().
Её, наверно, можно применять в индексированном представлении


Садись - неуд.

Не надо быть семи пядей во лбу, чтобы осознать: ограничения на индексированные вьюшки, в сущности, сводятся к возможности "пересчитать вью только в одной строке, при добавлении/убавлении/обновлении одной строки базовой таблицы, НЕ ВЫПОЛНЯЯ ГРУППИРОВКИ всей таблицы".

Со аггрегированной строкой такой фикус не проходит.
3 авг 18, 19:08    [21629426]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
aleks222
iap
В MSSQL-2017 появилась агрегатная функция STRING_AGG().
Её, наверно, можно применять в индексированном представлении


Садись - неуд.

Не надо быть семи пядей во лбу, чтобы осознать: ограничения на индексированные вьюшки, в сущности, сводятся к возможности "пересчитать вью только в одной строке, при добавлении/убавлении/обновлении одной строки базовой таблицы, НЕ ВЫПОЛНЯЯ ГРУППИРОВКИ всей таблицы".

Со аггрегированной строкой такой фикус не проходит.
Да. Может и так. В статье MS про индексированные представления про эту функцию ничего нет.
Я подумал, что есть надежда. Проверить не могу - нет поблизости 2017-го сервера.
3 авг 18, 19:33    [21629463]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 1119
Боюсь мне это не поможет, у клиентосов сервера начиная с 2012
4 авг 18, 08:39    [21629769]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
tunknown
Member

Откуда:
Сообщений: 759
энди
Хочется сделать индексированную вьюшку типа idschet, idcase, (составная строка всех значений DS2) через запятую для пары значений idschet и idcase
Обращаться к такой view только напрямую? "indexed view matching" автоматически работает только на Enterprise, на остальных редакциях нужно хинт NOEXPAND в запросах вручную ставить. На Express, кажется, совсем не работает.
6 авг 18, 09:38    [21630846]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
aleks222
Member

Откуда:
Сообщений: 920
tunknown
энди
Хочется сделать индексированную вьюшку типа idschet, idcase, (составная строка всех значений DS2) через запятую для пары значений idschet и idcase
Обращаться к такой view только напрямую? "indexed view matching" автоматически работает только на Enterprise, на остальных редакциях нужно хинт NOEXPAND в запросах вручную ставить. На Express, кажется, совсем не работает.


Работает оно везде.

А мракетологический высер мелкософта легко обходится доп. вьюшкой:

create view MyCoolIndexedView
as
select * from IndexedView with(noexpand)
6 авг 18, 12:50    [21631199]     Ответить | Цитировать Сообщить модератору
 Re: Индексированная вьюшка  [new]
Павел677
Member

Откуда:
Сообщений: 17
aleks222
Работает оно везде.

А мракетологический высер мелкософта легко обходится доп. вьюшкой:

create view MyCoolIndexedView
as
select * from IndexedView with(noexpand)


а есть какой нить обходной путь, чтобы сделать индексированную вьюху по системному объекту ?
1 июл 19, 15:50    [21918288]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить