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

Откуда:
Сообщений: 1882
Читаю статью

https://habrahabr.ru/post/247373/
В конце стоит, однако, отметить, что при создании кластеризованного индекса необходимо принять во внимание несколько аспектов: как много некластеризованных индексов будет основываться на нём...


вопрос в сабже.
13 сен 16, 16:36    [19660301]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
questioner,

https://www.sql.ru/articles/mssql/03013101indexes.shtml
раздел 4
13 сен 16, 16:42    [19660331]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
Владислав Колосов
Member

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

поскольку кластеризованный индекс - это и есть данные, то листы прочих индексов будут хранить ссылки на значения индексного ключа. В противном случае при изменении содержимого таблицы пришлось бы переписывать ссылки на кучу во всех индексах.
Фраза "как много ... на нем" выглядит двусмысленно, потому что - все.
15 сен 16, 09:51    [19667107]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Владислав Колосов
то листы прочих индексов будут хранить ссылки на значения индексного ключа

и не только листы
15 сен 16, 10:56    [19667431]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
jj324
Guest
Knyazev Alexey
Владислав Колосов
то листы прочих индексов будут хранить ссылки на значения индексного ключа

и не только листы


Разьве не только на листовом уровне ссылки на кластерный ключ?
15 сен 16, 11:01    [19667473]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
jj324
Knyazev Alexey
пропущено...

и не только листы


Разьве не только на листовом уровне ссылки на кластерный ключ?
В некоторых случаях не только.
15 сен 16, 11:04    [19667501]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
jj324
Guest
Гавриленко Сергей Алексеевич,

В каких? Можно где-то прочитать об этом?
15 сен 16, 11:06    [19667522]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
o-o
Guest
в неуникальном некластерном
нелистовые уровни будут содержать ключ кластерного с его уникализатором, если есть,
(для уникализации ключа некластерного)
ну и в уникальном некластерном утверждение Князева неверно:
кластерный ключ лишь на листовом уровне некластерного
15 сен 16, 11:14    [19667581]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
jj324
Guest
o-o,

спасибо большое. интересно и логично.
15 сен 16, 11:31    [19667724]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
o-o
Guest
почитать можно тут:
Geek City: Nonclustered Index Keys by Kalen Delaney
15 сен 16, 11:36    [19667753]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
questioner
Member

Откуда:
Сообщений: 1882
На картинке представлено как происходит выборка по некластерному индексу если в таблице есть кластерный индекс.
Картинка с другого сайта.

Как я понял, что

на верхнем уровне это root некластерного индекса

второй уровень это leaf level некластерного индекса. на втором уровне мы судя по всему ссылаемся на ключи кластерного индекса.

Что на третьем уровне я не понял.
На четверном видимо данные таблицы.


Вот выбрали мы EASTC, CONSH, SEVES.

Помогите понять, что дальше получается.
20 сен 16, 16:21    [19688288]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
questioner,

читайте про B+ дерево
20 сен 16, 16:27    [19688332]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
aleks2
Guest
TaPaK
questioner,

читайте про B+ дерево


Осподе, знатоки!
Если человек не может "в двух словах" объяснить то, что он, якобы, "понимает" - он нихрена не понимает.

Объясняю:
1. Данные в таблице упорядочены по кластерному индексу (или его заменителю в куче).
2. Чтобы достать-прочитать строку в таблице - ее нужно найти. Найти можно только зная КОНКРЕТНОЕ значение кластерного индекса для строки.
3. В этом случае, поиск осуществляется методом деления отрезка пополам, т.е. log(N, 2) чтений, где N - число записей в таблице.
4. Чтобы прочитать строку из таблицы поиском по ДРУГОМУ индексу, в этом другом индексе необходимо иметь КОНКРЕТНОЕ значение кластерного индекса для строки.
5. Т.е. сначала ищем позицию в ДРУГОМ индексе, считываем значение для кластерного индекса и ищем строку в кластерном индексе. Это называется LOOKUP. Всего 2 * log(N, 2) чтений.
6. Т.е. фактически, любой некластерный индекс суть
INDEX( поля индекса ) INCLUDE (поля кластерного индекса)
20 сен 16, 17:27    [19688685]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
aleks2
TaPaK
questioner,

читайте про B+ дерево


Осподе, знатоки!
Если человек не может "в двух словах" объяснить то, что он, якобы, "понимает" - он нихрена не понимает.

Объясняю:
1. Данные в таблице упорядочены по кластерному индексу (или его заменителю в куче).
2. Чтобы достать-прочитать строку в таблице - ее нужно найти. Найти можно только зная КОНКРЕТНОЕ значение кластерного индекса для строки.
3. В этом случае, поиск осуществляется методом деления отрезка пополам, т.е. log(N, 2) чтений, где N - число записей в таблице.
4. Чтобы прочитать строку из таблицы поиском по ДРУГОМУ индексу, в этом другом индексе необходимо иметь КОНКРЕТНОЕ значение кластерного индекса для строки.
5. Т.е. сначала ищем позицию в ДРУГОМ индексе, считываем значение для кластерного индекса и ищем строку в кластерном индексе. Это называется LOOKUP. Всего 2 * log(N, 2) чтений.
6. Т.е. фактически, любой некластерный индекс суть
INDEX( поля индекса ) INCLUDE (поля кластерного индекса)

правильно, лучше отвечать на то что знаешь, пусть оно и не относится к вопросу :)
тут полное не понимание самого дерева, а не поиска и его стоимость
автор
на верхнем уровне это root некластерного индекса

второй уровень это leaf level некластерного индекса. на втором уровне мы судя по всему ссылаемся на ключи кластерного индекса.

Что на третьем уровне я не понял.
На четверном видимо данные таблицы.
20 сен 16, 17:35    [19688727]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
o-o
Guest
aleks2
TaPaK
questioner,

читайте про B+ дерево


Осподе, знатоки!
Если человек не может "в двух словах" объяснить то, что он, якобы, "понимает" - он нихрена не понимает.

Объясняю:
1. Данные в таблице упорядочены по кластерному индексу (или его заменителю в куче).
2. Чтобы достать-прочитать строку в таблице - ее нужно найти. Найти можно только зная КОНКРЕТНОЕ значение кластерного индекса для строки.

Вот после таких высказываний точно крыша поедет.
Как можно упорядочить данные по *индексу*?
Или что является "заменителем индекса в куче"??
Убой какой-то.
Не надо в куче ничего заменять, особенно индексы.
---
Чтобы найти строку данных в таблице или индексе (а данные лежат в таблице, пока не берем случай include-поля в некластерном, т.к. вопрос был о построении некластерного поверх кластерного)
надо иметь возможность идентифицировать строку.
Т. е. нужен некий row locator, ключ, позволяющий однозначно определить строку. В куче им является rowid, физический адрес строки в файле данных.
В кластерной таблице им является КЛЮЧ кластерного (не индекс, ключ, прости господи).
Теперь в любом некластерном поверх кучи на листовом уровне лежат именно rowid-ы, а в некластерном поверх кластерного ключи кластерного. А на уровнях выше построено дерево, используя ключи некластерного, чтобы добираться до листового с его row locator-ами.

Наверное aleks2 это самое писал, только если все им описанное попытаться представить, можно офигеть
21 сен 16, 09:01    [19690159]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
aleks2
Guest
o-o
1. Как можно упорядочить данные по *индексу*?
2. Или что является "заменителем индекса в куче"??
Убой какой-то.
Не надо в куче ничего заменять, особенно индексы.
---
Чтобы найти строку данных в таблице или индексе (а данные лежат в таблице, пока не берем случай include-поля в некластерном, т.к. вопрос был о построении некластерного поверх кластерного)
надо иметь возможность идентифицировать строку.
Т. е. нужен некий row locator, ключ, позволяющий однозначно определить строку. В куче им является rowid, физический адрес строки в файле данных.
В кластерной таблице им является КЛЮЧ кластерного (не индекс, ключ, прости господи).
Теперь в любом некластерном поверх кучи на листовом уровне лежат именно rowid-ы, а в некластерном поверх кластерного ключи кластерного. А на уровнях выше построено дерево, используя ключи некластерного, чтобы добираться до листового с его row locator-ами.

Наверное aleks2 это самое писал, только если все им описанное попытаться представить, можно офигеть


1. Написать их в "порядке возрастания/убывания" значений полей кластерного индекса.
2. Какая те разница?

o-o
В кластерной таблице им является КЛЮЧ кластерного (не индекс, ключ, прости господи).

Хе-хе? Не индекс, но КЛЮЧ.
Теперь осталось дать определение ключа.

И не нужен бред о
o-o
Теперь в любом некластерном поверх кучи на листовом уровне лежат именно rowid-ы, а в некластерном поверх кластерного ключи кластерного. А на уровнях выше построено дерево, используя ключи некластерного, чтобы добираться до листового с его row locator-ами.

Какие, нахер, страницы? Какие такие rowid-ы?
Поциент, вы бредите.

Пользователю абсолютно не нужно представоение о внутреннем устройстве ХРАНИЛИЩА индекса.
Абстракции в виде линейно упорядоченной таблицы достаточно выше крыши.
21 сен 16, 10:03    [19690388]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
o-o
Guest
aleks2
И не нужен бред о
o-o
Теперь в любом некластерном поверх кучи на листовом уровне лежат именно rowid-ы, а в некластерном поверх кластерного ключи кластерного. А на уровнях выше построено дерево, используя ключи некластерного, чтобы добираться до листового с его row locator-ами.

Какие, нахер, страницы? Какие такие rowid-ы?
Поциент, вы бредите.

от больного и слышу, хамлюга.
упорядочить именно что можно по полям, а никак не по "индексу",
поосторожнее терминами кидайся,
тогда и не стану приводить твою писанину к вменяемому виду.
а по поводу rowid на, почитай на досуге,
*заменятель индексов в куче*, надо же:
Nonclustered Index Structures
BOL
If the table is a heap, which means it does not have a clustered index,
the row locator is a pointer to the row.
The pointer is built from the file identifier (ID), page number, and number of the row on the page.
The whole pointer is known as a Row ID (RID).

и кончай хамить,
я те вторую щеку не подставлю, не дождешься.
а помоев у меня предостаточно, если надо, вылью -- потонешь
21 сен 16, 11:38    [19690924]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
aleks2
Guest
o-o
aleks2
И не нужен бред о
пропущено...

Какие, нахер, страницы? Какие такие rowid-ы?
Поциент, вы бредите.

от больного и слышу, хамлюга.
упорядочить именно что можно по полям, а никак не по "индексу",
поосторожнее терминами кидайся,
тогда и не стану приводить твою писанину к вменяемому виду.
а по поводу rowid на, почитай на досуге,
*заменятель индексов в куче*, надо же:
Nonclustered Index Structures
BOL
If the table is a heap, which means it does not have a clustered index,
the row locator is a pointer to the row.
The pointer is built from the file identifier (ID), page number, and number of the row on the page.
The whole pointer is known as a Row ID (RID).

и кончай хамить,
я те вторую щеку не подставлю, не дождешься.
а помоев у меня предостаточно, если надо, вылью -- потонешь


Бесполезно приводить "цитаты" - они ничего не разъясняют.
Разные дурацкие слова из них еще сильнее размягчают неокрепший мозг.
Тебе еще раз повторю: знание устройства хранилища индекса - бесполезно пользователю.

А для понимания принципа работы индекса достаточно абстракции линейно упорядоченной таблицы.

Например
o-o
If the table is a heap, which means it does not have a clustered index,
the row locator is a pointer to the row. The pointer is built from the file identifier (ID), page number, and number of the row on the page.
The whole pointer is known as a Row ID (RID).

Достаточно сказать: если кластерного индекса нет - таблица упорядочивается по "номеру строки", номер генерируется автоматом в момент вставки.

ЗЫ. Хомячков я не боюсь.
21 сен 16, 11:59    [19691130]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
o-o
Guest
aleks2
Достаточно сказать: если кластерного индекса нет - таблица упорядочивается по "номеру строки", номер генерируется автоматом в момент вставки.
ЗЫ. Хомячков я не боюсь.

хомяк???
а ты кто, акула пера что ли?
не пичкай народ своими фантазиями,
чем ROW ID-ы не угодили,
своей официальностью и естественностью или тем, что о них некоторые только сегодня впервые узнали?
интереснее конечно нести фигню про какие-то сгенеренные специально для кучи "заменители индексов",
и про "упорядочивание кучи" по ним.
только вот куча потому и куча, что никто ничего в ней не упорядочивает
---
короче, не указывай мне, на что ссылаться,
a я не скажу, куда тебе пойти со своими росказнями
21 сен 16, 14:24    [19692371]     Ответить | Цитировать Сообщить модератору
 Re: Что значит, что один индекс основывается на другом?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
Модератор: Серенькие, узбагойтесь. (А то будете через проксю ходить)
21 сен 16, 16:47    [19693153]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить