Индексы

В этом разделе описываются индексы и их роль в оптимизации времени отклика запросов. В первой части главы рассматриваются вопросы хранения индексов и существующие для этого формы. В основном глава содержит описание трех операторов Transact-SQL, имеющих отношение к индексам: create index, alter index и drop index. После этого рассматривается фрагментация индексов и ее влияние на производительность системы. Затем приводятся некоторые общие рекомендации по созданию индексов.

Оценить
(2 голоса)
Опция disable делает существующий индекс неактивным. Каждый неактивный индекс является недоступным для использования, пока вы снова не переведете его в активное состояние. Обратите внимание, что неактивный индекс не изменяется при изменении соответствующих данных таблицы. По этой причине такие индексы должны быть полностью пересозданы, если вы хотите их снова использовать. Для активации неактивного индекса используйте опцию rebuild оператора alter table.
Оценить
(1 голос)
Оператор drop index удаляет один или более индексов из текущей базы данных. Обратите внимание, что удаление кластеризованного индекса может оказаться затратной по ресурсам операцией, потому что потребуется пересоздавать все некластеризованные индексы. (Все некластеризованные индексы используют индексные ключи кластеризованного индекса в качестве указателя в их индексных страницах листьев.) В примере 10.4 показано, как может быть удален индекс i_empno.   Оператор drop index имеет дополнительную опцию моуе то, которая является аналогом опции on в операторе create index. Другими словами, вы можете использовать эту опцию для указания места, куда нужно помещать строки данных, которые размещаются в страницах листьев кластеризованного индекса. Эти данные перемещаются…
Оценить
(1 голос)
Хотя Database Engine практически не имеет никаких ограничений, связанных с количеством индексов, все же рекомендуется ограничить их число по целому ряду причин. Во-первых, каждый индекс использует определенное количество дисковой памяти, следовательно, существует вероятность того, что общее количество индексных страниц может превысить количество страниц данных в базе данных. Во-вторых, в отличие от преимуществ использования индексов при поиске данных, добавления и изменения данных имеют прямое воздействие на поддержку индексов. Чем больше индексов в таблице, тем больше требуется реорганизаций индексов для таких операций. Практическое правило- выбирайте индексы разумно для часто выполняемых запросов, а позже оценивайте использование индексов. Этот раздел дает несколько рекомендаций по…
Оценить
(1 голос)
Если предложение where в операторе select содержит условие поиска с одним столбцом, вы должны создать индекс для этого столбца. Использование индекса в особенности рекомендуется, если селективность условия является высокой. Селективность условия определяется как отношение количества строк, удовлетворяющих условию, к общему количеству строк в таблице. (Высокая селективность соответствует меньшему значению этого отношения.) Наиболее успешная обработка поиска с использованием индексированного столбца может быть достигнута, если селективность условия составляет 5% или менее. Столбец не должен быть индексирован, если селективность условия равна 80% или более. В таких случаях для существующих индексных страниц будут нужны дополнительные операции ввода/вывода, что уменьшает любую экономию времени, достигаемую за…
Оценить
(1 голос)
В случае использования операции соединения рекомендуется индексировать каждый соединяемый столбец. Соединяемые столбцы обычно представляют первичный ключ одной таблицы и соответствующий внешний ключ другой или той же самой таблицы. Если вы задаете ограничения целостности primary key и foreign key для соответствующих соединяемых столбцов, то должен быть создан только некластеризованный индекс для столбца внешнего ключа, поскольку система неявно создает кластеризованный индекс для столбца PRIMARY key. В примере 10.6 показано создание индексов, которые будут использованы, если у вас есть запрос с операцией соединения и с дополнительным фильтром.     Для примера 10.6 рекомендуется создание двух отдельных индексов: для столбца emp_no в обеих таблицах…
Оценить
(3 голоса)
Как вы уже знаете, значительное повышение производительности может быть достигнуто, когда все столбцы запроса включены в индекс. В примере 10.7 показан покрывающий индекс.   В примере 10.7 в первую очередь из таблицы Address удаляется существующий индекс ix_Address_stateProvinceiD. На следующем шаге создается новый индекс, который дополнительно включает два других столбца, помимо столбца PostaiCode. В заключение оператор select в конце примера демонстрирует запрос, покрываемый индексом. Для этого запроса системе нет необходимости отыскивать данные в страницах данных, потому что оптимизатор может найти все значения столбцов в страницах листьев некластеризованного индекса.
Оценить
(2 голоса)
Database Engine позволяет создавать следующие специальные типы индексов: ♦ индексы для вычисляемых столбцов; ♦ индексы для представлений. В этом разделе обсуждаются вычисляемые столбцы; индексированные представления будут рассматриваться в следующей главе. Вычисляемый столбец - это столбец таблицы, который используется для хранения результата вычисления данных таблицы. Такой столбец может быть виртуальным или постоянным. В следующем подразделе описываются обе эти формы вычисляемых столбцов.
Оценить
(1 голос)
Вычисляемый столбец без соответствующего кластеризованного индекса является логическим, т. е. он физически не хранится на жестком диске. Следовательно, он вычисляется каждый раз, когда к строке осуществляется доступ. В примере 10.8 демонстрируется использование виртуальных вычисляемых столбцов.   Таблица orders в примере 10.8 имеет два вычисляемых столбца: total и shippeddate. Столбец total вычисляется с использованием двух других столбцов: price и quantity, тогда как столбец shippeddate вычисляется при использовании функции даты dateadd и столбца orderdate.
Оценить
(1 голос)
Database Engine позволяет создавать индексы для детерминированных вычисляемых столбцов, где столбцы имеют точные типы данных. (Вычисляемый столбец называется детерминированным, если одни и те же значения всегда возвращаются для одних и тех же данных таблицы.) Индексированный вычисляемый столбец может быть создан, только если следующие опции в операторе set установлены в значение on (эти опции гарантируют детерминированность столбца): ♦ quoted_identifier; ♦ concat_null_yields_null; ♦ ansi_nulls; ♦ ansi_padding; ♦ ansi_warnings. Также должна быть установлена в off опция numeric_roundabort. Если вы создаете кластеризованный индекс для вычисляемого столбца, то значения этого столбца будут физически присутствовать в соответствующих строках таблицы, потому что страницы листьев кластеризованного индекса содержат…
Оценить
(1 голос)
Начиная с SQL Server 2005, можно явно отмечать вычисляемый столбец как постоянный, используя опцию persisted. Эта опция позволяет указать, что вычисляемый столбец будет физически существовать в соответствующих строках таблицы, даже если не будет создан корреспондирующий кластеризованный индекс. Эта возможность необходима для вычисляемых столбцов, созданных из приближенных типов данных (float и real). (Как вы уже знаете, вы можете создавать индекс для вычисляемых столбцов только в том случае, если используемые в вычислении столбцы имеют точные типы данных.)
© 2020 www.serversql.ru. Все права защищены.