[МУЗЫКА] [МУЗЫКА] Индексы бывают кластерные и некластерные. Кластерный индекс — это самый важный индекс, который может быть построен в таблице. И он должен быть построен по тому полю, по которому мы чаще всего будем искать, потому что именно кластерный индекс обеспечивает нам самый быстрый поиск значений в таблице. Кластерный индекс для таблицы может быть только один. Если мы определили какое-то поле или комбинацию полей при создании таблицы в качестве первичного ключа, то для этого поля мы автоматически построили кластерный индекс. Рекомендации для ключа, который выбрать для построения кластерного индекса. Желательно, чтобы этот ключ был узкий, то есть занимал как можно меньшую длину. Чтобы он был уникальный, то есть чтобы записи индексированного столбца не повторялись. И чтобы он был статичный, чтобы нам не приходилось часто перестраивать структуру при изменении ключевого значения. Длинные текстовые или битовые поля плохо подходят для построения кластерных индексов. Как может появиться кластерный индекс у таблицы? Первый способ — это определить поле или комбинацию полей в качестве первичного ключа. Если мы не определили ни одного поля первичным ключом, но определили какие-то поля уникальными, то в таком случае первое уникальное поле и берется за основу для построения кластерного индекса. Если мы не использовали первичного ключа или уникальности полей при создании таблицы, то система может построить нам скрытое поле с суррогатным цифровым идентификатором и по нему создать кластерный индекс. Мы создали кластерный индекс по какому-то полю, которое мы сочли наиболее важным, и обеспечили тем самым наиболее быстрый поиск по значению этого поля. Но может потребоваться, что мы хотим искать по разным критериям. Мы, например, построили индекс в таблице «Студенты» по номеру зачетки, но нам еще иногда хочется искать по имени студента, может быть, по адресу и еще по каким-то критериям. Что же делать тогда? Тогда можно строить дополнительные индексы, которые называются некластерными. Общая рекомендация состоит в том, что некластерные индексы строятся только после создания кластерного индекса в таблице, потому что некластерные индексы основаны на кластерном. Как появляются некластерные индексы? Они появляются автоматически, если мы при создании таблицы объявляем поля уникальными. А могут быть созданы отдельные команды CREATE INDEX после создания таблицы. Рассмотрим команду создания некластерного индекса. Мы пишем CREATE INDEX. Дальше указываем обязательно имя индекса. После этого указываем имя таблицы и имя поля или полей, по которым мы строим этот дополнительный индекс. Как строится некластерный индекс? Для каждой записи нашей таблицы мы размещаем в индексную структуру пару. Это значение ключа данной записи и значение поля, по которому мы строим индекс. Эти записи мы размещаем в порядке возрастания индексируемого поля. В таком случае наши записи оказываются упорядочены по значению этого поля. Для этих записей мы можем определить минимальное значение индексируемого поля в каждом блоке, определить адрес блока и построить структуру на основе B-дерева, как мы уже делали для кластерного индекса. Давайте рассмотрим пример построения некластерного индекса по полю «Имя студента» для таблицы «Студент». Мы берем из нашей таблицы значения двух столбцов. Это имя студента и номер зачетки, который является у нас ключом. Упорядочиваем эти значения по имени студента. Распределяем эти записи в блоках. Для каждого блока находим минимальные значения имени студента. Запоминаем адрес блока и строим индексную структуру на основе B-дерева. Вот результаты построения этой индексной структуры вы видите на экране. Рассмотрим построение некластерного индекса по составному ключу. Для построения индекса мы можем брать не одно поле, а сочетание нескольких столбцов нашей таблицы. При этом нужно обратить внимание на порядок столбцов. Порядок очень важен, и в первую очередь индекс будет использоваться, если мы при запросе определим те столбцы, которые были использованы в начале при построении индекса. И лучше располагать порядок столбцов в порядке уменьшения избирательности, то есть в начале брать тот столбец, который имеет большее количество разных значений в нашей таблице. Для примера составного индекса мы построим индекс по номеру аудитории и дате экзамена для нашей таблицы экзаменационных ведомостей. Пример выполнения этой команды мы видим на экране. Для всех построенных индексов система хранит дополнительную служебную информацию, которая называется статистикой. В этом файле накапливается информация о количестве строк, которые есть в таблице, о длине и количестве различных значений ключа, о распределении значений ключа, о фрагментации, если в нашем файле появляются пустые места, и прочая полезная информация. Информация статистики используется оптимизатором запросов для принятия решений о целесообразности использования индекса для выполнения запросов. [БЕЗ_ЗВУКА]