Программирование >>  Реализация баз данных 

1 ... 107 108 109 [ 110 ] 111 112 113 ... 162


CREATE TABLE dbo. Persons - .

(

personid smallint PRIMARY KEY NOfJCLUSTERED, . .

firstname varchar(30), lastname varchar(40),

socialsecuritynumbe r(ll) JNIQUE CLUSTERED

) .- -

Индексы могут создаваться ько для столбцов с ограничениями, а \ любого столбца или комбинации столбцов чмблицы или представления. Уникальность кластерного индекса обеспечивается с помощью внутренних механизмов. Поэтому при создании пеуникального кластерното индекса для столбца с избыточными значениями SQL Server генерирует для значений столбцов уникальные значения, служащие в ка-

честве вторичного ключа сортировки. Чтобы избежать дополнительной работы по поддержке уникальных значений столбцов с избыточными значениями, следует отдать предпочтение кластерным индексам на столбцах с ограничением primary key.

Некластерные индексы

Для таблицы или представления можно создать до 250 некластерных индексов или 249 некластерных и 1 кластерный жде чем создавать некластерные индексы для пред-ставлеш1я. необходимо создать унпьальньнТ кластерный индекс. Однако это ограничение не относится к таблицам. Некластерный индекс напоминает предметный указатель книги, где у каждого элемента мответствующая страница. Базы данных используют некластерный индекс поиска записей, соответствующих запросу.

Если в таблице нет кластерното индекса, таблица является неупорядоченной и называется кучей. Некластерный индекс, созданный для кучи, содержит указатели на записи таблицы. Каждый элемент страницы индекса содержит идентификатор строка : ID, RJD) - указатель на табличную строку в куче, содержащий номер страницы, номер файла и номер ячейки. При наличие рно[ и индекса страницы некластерного индекса содержат ключи кластерного индекса, а не R1D. Указатель индекса ак RID, так и ключ индекса) называется закладкой. , ,

Свойства индекса

Помимо типа (кластерный или некластерный), индекс имеет ряд других свойств. Его можно определить как:

уникальный - в нем недопуска.;тся дублирование записей;

составной - ключ такого bkci состоит из нескольких столбцов;

с коэффициентом заполнения ющим увеличение нин индекса при необходимости;

с разреженным индексов nd(;x) для изменения объема памяти, выделенного для размещения промежуточные BHef В-дерева;

с упорядочением ключей индексШо возрастанию или по убыванию).

У индекса могут быть дополнительные свойства, например группа файлов, хранящая индекс. За более подробной информацией обратитесь к разделу SQL Server. Books ОпЦпе, посвященному оператору CREATE INDEX, и к материалу занятия 2.



Индексы разрешается строить для одного или нескольких столбцов таблицы или представления. Кром того, индексы можно задавать и для вычисляемых столбцов, но с некоторыми ограничениями.

Уникальный индекс

У уникального индекса ключи и соответствующие им значения столбцов должны быть уникальны. Уникальный индекс разрешается создать для любого бца, если все его значения уникальны. Такой индекс также можно построить для группы (комбинации)

столбцов. Уникальный составной индекс должен быть однозначным. Например, столбцы

с фамилией и номером страховки, для которых создан уникальный индекс, не должны содержать пустых значений. Более того, комбинации фамилии и номера страховки должны быть уникальными.

SQL Server автоматически создает уникальный индекс для столбцов с ограничениями primary key или unique. Поэтому лучше обеспечивать однозначность данных 11ос))сдс1 iio.\f

ограничений, избегая непосредственного использования свойства unique. SQL Server не

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

Составной индекс

Составным называется любой индекс, ключ которого образован несколькими столбцами таблицы. Составные индексы позволяют зводительность запросов, уменьшая число операций ввода-вывода, поскольку запрос к комбинации столбцов индекса не выходит за пределы индекса. Если результат запроса можно получить из индекса, без обращения meii в его основе таблице, то такой запрос считается покрытым, а индекс: - покрывающим. Запрос к единственному столбцу, например к столбцу с ограничением primary key, покрывается автоматически созданным для такого столбца. При

исполнении покрытого запроса к набору столбцов покрывающим является составной

декс. Предположим, исполнен такой запрос:

SELECT eiiip id, Iname, job lvl FROM employeeOI

WHERE hire date < (GETDATEO - 30) ANDjob lvl >=100

ORDER BY

Если для столбца существует кластерный индекс, а для столбцов

Job Lvl и nire Date - некластерный индекс i V,-. то покрывающим индексом будет INgO, Помните, что у некластерного индекса, созданного для таблицы с кластерным индексом, закладкой является ключ кластерного индекса. Поэтому индекс INco содержит все столбцы, описанные в запросе (этот индекс является покрывающим, а запрос - покрытым). На рис. показано, что оптимизатор запросов использует индекс INco в плане исполнения запроса.




SELECT , Sort

Cost: 0% Cose; ;>4%

Рис. 11-1. Ha вкладке Execution i панели Resuts видно,

что оптимизатор запросов использует покрывающий индекс INco

Коэффициент заполнения енность индекса

При добавлении строки в таблицу 1. Server должен найти место для новой строки. Операция добавления совершается при исполнении оператора INSERT или при обновлении ключа кластерного индекса с помощью оператора UPDATE. Если в таблице нет кластерного индекса, запись и страница индекса помешаются в любое доступное место в куче. Если в таблице есть кластерный индекс, Server находит в В-дереве подходящую трп-ницу индекса и размещает запись Е соответствии с порядком сортировки. Если страница индекса уже заполнена, то она дел 1тся пополам (половина ее страниц остается в исходной странице индекса, а другая вина - переносится на следующую страницу индекса). Если вставленная строка велика, может потребоваться дополнительное разделение страниц, однако операция разделения страницы сложна и требует много ресурсов. Чаще всего разделение шш: выполняется на листовом уровне. Чтобы уменьшить число операций разделения страницы, следует задать заполнения страниц индекса на момент их создания. Этот параметр называется коэффициентов шненшг По умолчанию он равен нулю. Эт чает, что при создании страницы для существующих данных, она заполняется полностью. Значения коэффициента заполнения 0 и 100 аналогичны. Можно задать глобальный коэффициент заполнения по умолчанию для сервера в целом средствами хранимой процедуры или используя конструкцию FILL-FACTOR - для определенного индекса. В системах обработка акцип с высокой пропускной способностью допустимо также выделить дополнительное место для страниц индекса промежуточного уровня. место, которое выделяется для индексных страниц промежуточного уровня, определяется разреженностью индекса. Вы научитесь использовать коэффициент в занятии 2.

Порядок сортировки

При создании индекс по возрастанию. Это касается как кластерных, так

и некластерных индексов. Кластерный индекс определяет порядок сортировки таблицы. Рассмотрим оператор SELECT:

SELECT enip id, Iname, job lvl FROM employeeQI

WHERE hire date < (GETDATE{) - 30) AND joD lvl >= 100



1 ... 107 108 109 [ 110 ] 111 112 113 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика