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

Откуда:
Сообщений: 1214
Вопрос теоритический. Имеет ли смысл делать материализованное представление, для того чтобы "эмулировать" наличие нескольких кластерных индексов на таблице?

Положим, есть таблица Сдшутеы , в которой кластерный индекс по ClientId (создан при разработке системы), а в последствии оказалось, что 99% запросов это поиск конкретного клиента по ИНН.

Создание материализованной вьюхи по INN, с последующей вклейкой этой вьюхи в логику, даст прирост к скорости?
8 июн 17, 15:53    [20550563]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
автор
таблица Сдшутеы

таблица Clients
8 июн 17, 16:14    [20550682]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Cammomile
Вопрос теоритический. Имеет ли смысл делать материализованное представление, для того чтобы "эмулировать" наличие нескольких кластерных индексов на таблице?

Положим, есть таблица Сдшутеы , в которой кластерный индекс по ClientId (создан при разработке системы), а в последствии оказалось, что 99% запросов это поиск конкретного клиента по ИНН.

Создание материализованной вьюхи по INN, с последующей вклейкой этой вьюхи в логику, даст прирост к скорости?
Проще сделать индекс по ИНН.
Если хотите прирост скорости при чтении, то include(все нужные поля).

Материализованное представление не для этого.
8 июн 17, 16:24    [20550733]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Некластерный индекс по ИНН конечно же сделан.
Вопрос в том, что не окажется ли так, что вьюха с кластерным индексом и джойн на нее будут быстрее?
Мне не нужна скорость получения ИНН, мне нужна скорость ПОИСКА по ИНН.
8 июн 17, 16:37    [20550780]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
Cammomile
Некластерный индекс по ИНН конечно же сделан.
"Маладежь" опять не читает, что ему пишут?...

Чтобы сэмулировать кластерный по ИНН нужно - create index ... on ... (ИНН) include (оставшиеся столбцы таблицы).
8 июн 17, 16:55    [20550853]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Молодежжж© не понимает где связь между INCLUDE и ускорением поиска по индексированному полю.

Давайте я так перефразирую.

Eсть Clients(ClientID uniqueidentifier , INN nvarcahr(200) )
есть CIX_Clients_ClientID
есть NCIX_Clients_INN

Можно ли ускорить поиск по INN во всяких запросах WHERE INN ='111111111' WHERE INN like '111%' ?
8 июн 17, 17:04    [20550896]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Cammomile
Мне не нужна скорость получения ИНН, мне нужна скорость ПОИСКА по ИНН.

А "получение" и "поиск" -- это какие команды?
8 июн 17, 17:16    [20550949]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
Cammomile
Молодежжж© не понимает где связь между INCLUDE и ускорением поиска по индексированному полю.
А что такое кластерный индекс понимаете? Если понимаете, то непонятно, что вы не понимаете.
Cammomile
Можно ли ускорить поиск по INN во всяких запросах WHERE INN ='111111111' WHERE INN like '111%' ?
Если предикаты адекватные, то достаточно просто индекса по ИНН.
8 июн 17, 17:18    [20550958]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ну все же знают что по кластерному ускоряется поиск... чем по не кластерному
8 июн 17, 17:34    [20551010]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Cammomile
Молодежжж© не понимает где связь между INCLUDE и ускорением поиска по индексированному полю.

Давайте я так перефразирую.

Eсть Clients(ClientID uniqueidentifier , INN nvarcahr(200) )
есть CIX_Clients_ClientID
есть NCIX_Clients_INN

Можно ли ускорить поиск по INN во всяких запросах WHERE INN ='111111111' WHERE INN like '111%' ?
select ClientID, INN from Clients WHERE INN ='111111111' 
Это поиск по индексу. Считывается(грубо говоря, т.е. без учета дерева) одна страница индекса.
select * from Clients WHERE INN ='111111111' 
Считывается две страницы. Страница индекса, и страница таблицы через лукап. Потому что в индексе нет всех полей звездочки.

Если вы создадите NCIX_Clients_INN с include (ClientName) то
select  ClientID, INN, ClientName from Clients WHERE INN ='111111111'
будет читать одну страницу индекса, не обращаясь таблице - вот вам и прирост.
Но в любом случае прирост в данном случае будет не более, чем в 2 раза.
8 июн 17, 17:51    [20551073]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Еще важный момент

Если вы создадите NCIX_Clients_INN с include (ClientName) то поиск клиентов по региону
select  ClientID, INN, ClientName from Clients WHERE INN like '59%'
даст значительный прирост.
Потому что будут читаться страницы индекса подряд, без лукапа на основную таблицу.


select  ClientID, INN, ClientName, KPP from Clients WHERE INN like '59%'
А при таком запросе будет лукап на основную таблицу, что дает по дополнительной странице(в худшем варианте, но оценивать надо именно так) на каждую строку.

Вот для чего нужен include.
8 июн 17, 18:14    [20551129]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Я знаю для чего нужен инклюд. Это просто вообще не мой случай, потому, что клиент это "точка входа", а далее там начитываются мегатонны вещей из десятка связанных таблиц. Кроме фио у клиентов бывают договоры, настройки доступа, какие-то услуги, ареса и мульоны других объектов.
8 июн 17, 18:19    [20551142]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Cammomile
Я знаю для чего нужен инклюд. Это просто вообще не мой случай, потому, что клиент это "точка входа", а далее там начитываются мегатонны вещей из десятка связанных таблиц. Кроме фио у клиентов бывают договоры, настройки доступа, какие-то услуги, ареса и мульоны других объектов.
Значит вы вопрос так задали, что вас не поняли.
В любом случае оценивать надо количеством страниц.

Если вход ИНН клиента, и потом 10 объектов с клястерным ключом по id клиента, то будет примерно 11 страниц.

Если поместить это все в материализованное представление, то будет 1 страница. Будет выигрыш.
Но едва ли сервер на 11 страницах загибается у вас. Возможно страниц на самом деле гораздо больше при чтении объектов.
8 июн 17, 18:36    [20551205]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Согласен, я максимально сжал описание для экономии времени.
Сервер у меня вообще не загибается, это больше исследовательская задача.
Из серии можно ли сделать так, чтоб запрос выполнялся не 200 миллисекунд, а 50.
В принципе, отлично бы зашли COLUMNSTORE, если бы не наш чудо 2012й помноженный на гуиды в ПК.
8 июн 17, 18:45    [20551238]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Cammomile
Некластерный индекс по ИНН конечно же сделан.
Вопрос в том, что не окажется ли так, что вьюха с кластерным индексом и джойн на нее будут быстрее?
Мне не нужна скорость получения ИНН, мне нужна скорость ПОИСКА по ИНН.
Любой индекс - это и есть "кластерный индекс" по индексируемым полям, с "данными в строках" из тех полей, которые в include.
Индекс вам точно поможет, а вот матпредставление не всегда.
8 июн 17, 18:55    [20551260]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4716
TaPaK
ну все же знают что по кластерному ускоряется поиск... чем по не кластерному


А заодно повышается число блокировок при вставке
8 июн 17, 19:19    [20551313]     Ответить | Цитировать Сообщить модератору
 Re: Indexed View для эмуляции кластерного индекса  [new]
msLex
Member

Откуда:
Сообщений: 8066
a_voronin
TaPaK
ну все же знают что по кластерному ускоряется поиск... чем по не кластерному


А заодно повышается число блокировок при вставке

Пост TaPaK-а был неприкрытым сарказмом, а ваш я вообще не понял.

В каком случае повышается? При поиске по кластерному/не кластерному индексу?
8 июн 17, 19:26    [20551325]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить