Индексы
В этом разделе описываются индексы и их роль в оптимизации времени отклика запросов. В первой части главы рассматриваются вопросы хранения индексов и существующие для этого формы. В основном глава содержит описание трех операторов Transact-SQL, имеющих отношение к индексам: create index, alter index и drop index. После этого рассматривается фрагментация индексов и ее влияние на производительность системы. Затем приводятся некоторые общие рекомендации по созданию индексов.
Системы баз данных обычно используют индексы для обеспечения быстрого доступа к реляционным данным. Индекс является отдельной физической структурой данных, которая предоставляет ускоренный доступ запросов к одной или нескольким таблицам. Правильная настройка индексов является ключевым моментом для улучшения производительности запросов. У индекса есть много сходного с предметным указателем книги. Когда вы отыскиваете необходимую тему в книге, то используете ее предметный указатель для определения номера страницы (страниц), где описывается эта тема. Аналогично этому, когда вы осуществляете поиск строки в таблице, Database Engine использует индекс для нахождения ее физического размещения. Однако существуют два основных отличия предметного указателя от индекса базы данных. ♦ Как…
Кластеризованный индекс определяет физический порядок данных в таблице. Database Engine позволяет создавать один кластеризованный индекс для таблицы, потому что строки в таблице не могут быть физически упорядочены более чем одним способом. При использовании кластеризованных индексов система выполняет навигацию от корневого узла структуры В-дерева вниз до узлов листьев, которые связаны вместе в список двойной связи, называемой цепочкой страниц. Самым важным свойством кластеризованных индексов является то, что их страницы листьев содержат страницы данных. Все другие уровни структуры кластеризованных индексов составлены из индексных страниц. Если кластеризованный индекс (явно или неявно) определен для таблицы, то таблица называется кластеризованной таблицей. На рис. 10.2 показана структура…
Некластеризованный индекс имеет точно такую же структуру, что и кластеризованный индекс, но с двумя важными отличиями: ♦ некластеризованный индекс не изменяет физический порядок строк в таблице; ♦ страницы листьев в некластеризованном индексе состоят из индексных ключей и закладок. Физический порядок строк в таблице не изменяется, если для этой таблицы определяется один или более некластеризованных индексов. Для каждого некластеризованного индекса Database Engine создает дополнительную индексную структуру, которая сохраняется в индексных страницах. Закладка в некластеризованном индексе показывает, где находится строка, соответствующая индексному ключу. Закладка, как часть индексного ключа, может иметь две формы, в зависимости от формы таблицы, т. е. таблица может быть…
Теперь, когда вы знакомы с физической структурой индексов, в этом разделе будет рассмотрено, как вы можете создавать, изменять и удалять индексы, получать данные о фрагментации индексов и редактировать информацию индексов - все это поможет вам в дальнейшем обсуждении использовать индексы для увеличения производительности системы.
Оператор create index создает индекс для конкретной таблицы. Общая форма этого оператора: create [unique] [clustered |nonclustered] index index_name on table_name {columnl [asc i desc] , ...) [ include ( column_name [,...])] [with [fillfactor=n] [[, ] pad_index = [on i off}] [[, ] drop_existing = [on | off}] [[, ] sort_in_tempdb = [on | off}] [[, ] ignore_dup_key = (on | off}] [[, ] allow_row_locks = {on i off}] [[, ] allow_page_locks = [on | off}] [[, ] statistics_norecompute = [on i off}] [[, ] online = {on I off}]] [on file_group | «default»] Здесь index_name задает имя создаваемого индекса. Индекс…
В процессе жизненного цикла индекса он может стать фрагментированным, что означает неэффективное хранение его данных на страницах. Существуют две формы фрагментации индекса: внутренняя и внешняя. Внутренняя фрагментация определяет объем данных, который хранится на каждой странице. Внешняя фрагментация появляется, когда нарушается логический порядок страниц. Для получения информации о внутренней фрагментации индекса вы можете использовать либо динамически управляемое представление (DMV), называемое sys.dm_db_index_physical_stats, либо команду dbcc showcontig. В этом разделе обсуждается только DMV, потому что dbcc showcontig не является рекомендуемой возможностью. Представление sys.dm_db_index_physicai_stats возвращает размер и информацию о фрагментации для данных и индексов указанной таблицы. Для каждого индекса возвращается одна строка для каждого…
После того как вы просмотрели информацию о фрагментации индекса, как обсуждалось в предыдущем разделе, вы можете использовать следующие системные средства для редактирования как этой информации, так и другой информации индекса: ♦ представление просмотра каталогов sys. indexes; ♦ представление просмотра каталогов sys. indexcolumns; ♦ системная процедура sp_heipindex; ♦ функция свойств object property; ♦ SQL Server Management Studio; ♦ DMV sys .dm_db_index_usage_stats; ♦ DMV sys .dm_db_missing_index_details. Представление просмотра каталогов sys.indexes содержит строку для каждого индекса и строку для каждой таблицы без кластеризованного индекса. Наиболее важными столбцами этого представления являются objectid, name и index_id. objectid- имя объекта базы данных, которому принадлежит индекс, a…
Database Engine является одной из немногих систем баз данных, которая реализует оператор alter index. Этот оператор может быть использован для поддержки деятельности с индексами. Синтаксис оператора alter index очень похож на синтаксис оператора create index. Иными словами, этот оператор позволяет вам изменять установки следующих опций: allow_row_locks, allow_page_locks, ignore_dup_key и statistics_norecompute. В дополнение к перечисленным опциям оператор alter index поддерживает три других действия: ♦ пересоздание индекса с использованием опции rebuild; ♦ реорганизацию страниц листьев индекса при использовании опции reorganize; ♦ перевод индекса в неактивное состояние с использованием опции disable.
Существуют три способа, которые можно использовать для пересоздания индекса: ♦ опция rebuild в операторе alter index; ♦ опция drop_existing в операторе create index; ♦ команда dbcc dbreindex. С опцией rebuild вы можете пересоздавать индекс. Если вы задаете all вместо имени индекса, все индексы указанной таблицы будут пересозданы. (Предоставляя возможность динамически пересоздавать индексы, вам не нужно будет их удалять и создавать заново.) Опция drop_existing в операторе create index позволяет улучшить производительность, когда пересоздается кластеризованный индекс для таблицы, которая также содержит и некластеризованный индекс. Опция указывает, что существующий кластеризованный или некластеризованный индекс должен быть удален и заданный индекс создан заново. Как вы…
Опция reorganize оператора alter index указывает, что страницы листьев соответствующей индексной структуры будут реорганизованы таким образом, чтобы физический порядок этих страниц соответствовал логическому порядку слева направо для узлов-листьев. Таким образом, эта опция удаляет фрагментацию индекса, повышая производительность, (reorganize заменяет команду dbcc dbreindex.)
© 2021 serversql.ru. Все права защищены.