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

Откуда: Moscow
Сообщений: 907
Проясните пожалуйста вопрос, по поводу кластерного индекса.

Из статьи на Хабре
https://habrahabr.ru/post/188704/

Он устроен как обычное B-дерево, но в его листьевых страницах вместо 
ссылок на записи таблицы расположены сами данные, 
а отдельной от него таблицы больше нет. 

Таблица не может [b]иметь[/b] кластеризованный индекс, она может [b]быть[/b] кластеризованным индексом.


А как вообще происходит работа непосредственно с индексом ? В моих мечтах, я считал, что он фактически хранится (загружается) в память с диска, затем в нем все быстро ищется (оперативка же) и затем уже идет обращение к таблице - находящейся на диске, по указателям из листовых элементов индекса.

А как можно загрузить в память кластерный индекс, если он суть таблица на диске ?

Когда база данных ищет что-то в кластерном диске, она что, по сути, тупо елозит по всей таблице на жестком диске - т.е. делает фуллскан самой таблицы ?

Я могу предположить, что работает это так:
Данные таблицы просто записаны последовательно согласно индексу на жестком диске:
Record1
Record2
Record3
(Record - это строка таблицы, все поля)

В записи Record есть поля относящиеся к кластерному индексу. Как база данных понимает где начало Record2, Record3 - т.е. куда ей прыгнуть дальше сканируя индекс ? По смещению что ли (арифметика указателей, терминами С++) ? Или она по сути таки сканирует всю Record, т.к. о сути делает фуллскан ?

Объясните пожалуйста этот момент, не припоминаю, чтобы он был где-то так подробно разъяснен..
21 апр 16, 18:27    [19090148]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
ProBiotek,

начать можно с этой статьи:
https://www.sql.ru/articles/mssql/03013101indexes.shtml
21 апр 16, 19:15    [19090325]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
daw,

Мой вопрос та статья не проясняет.
Я о том и говорю, что статьи подобного рода расказывают лишь в общих чертах: кластерный индекс это суть таблица бла бла бла.

Единственное, что есть близко, это "индексы занимают дополнительное место на диске и в оперативной памяти". Ответа на свой вопрос я не нашел (как происходит физически работа с кластерным индексом)
21 апр 16, 19:45    [19090439]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
iljy
Member

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

работа с любыми объектами БД происходит одинаково: нужные страницы считываются в кеш в памяти и хранятся там, пока не будут по тем или иным причинам вытеснены.
21 апр 16, 19:56    [19090471]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
ProBiotek
daw,

Мой вопрос та статья не проясняет.
Я о том и говорю, что статьи подобного рода расказывают лишь в общих чертах: кластерный индекс это суть таблица бла бла бла.

Единственное, что есть близко, это "индексы занимают дополнительное место на диске и в оперативной памяти". Ответа на свой вопрос я не нашел (как происходит физически работа с кластерным индексом)


если ее не читать, то, конечно, не проясняет. там не "в общих чертах". там подробно разжевано, с картинками, "как происходит физически работа с кластерным индексом".
21 апр 16, 20:08    [19090502]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
LoopN
Guest
На ютубе видео "Индексы и все, все, все (Часть 1) ", там Короткевич популярно все объяснил.
21 апр 16, 20:20    [19090531]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
ProBiotek
А как вообще происходит работа непосредственно с индексом ? В моих мечтах, я считал, что он фактически хранится (загружается) в память с диска, затем в нем все быстро ищется (оперативка же) и затем уже идет обращение к таблице - находящейся на диске, по указателям из листовых элементов индекса.
Как хорошо что не вы писали SQL Server. Хватит уже мечтать и начните хоть что-нибудь читать. Вы знаете как осуществляется поиск по индексу? Если нет, то почитайте. Зачем грузить весь индекс в память если вам нужно найти одну строку? А если у вас индекс 1ГБ?

ProBiotek
Мой вопрос та статья не проясняет.
Я о том и говорю, что статьи подобного рода расказывают лишь в общих чертах: кластерный индекс это суть таблица бла бла бла.
Перечитайте еще раз.

Да и ваш вопрос не о кластерных индексах вообще, а о том как SQL Server работает со страницами на диске и в памяти - Buffer Management. Чего вы прикопались к кластерному индексу?
21 апр 16, 20:30    [19090565]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс. Немного не понял.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
если ищем по кластерному индексу, то переходим от страницы самого верхнего уровня, к страницам ниже и так до листового уровня с данными и считываем нужную строку наконец. Весь страницы кластерного индекса тогда загружать не надо
21 апр 16, 20:42    [19090601]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить