Кластерный и некластеризованный индекс: основные различия с примером

Содержание:

Anonim

Что такое индекс?

Индекс - это ключ, построенный из одного или нескольких столбцов в базе данных, который ускоряет выборку строк из таблицы или представления. Этот ключ помогает базе данных, такой как Oracle, SQL Server, MySQL и т. Д., Быстро найти строку, связанную со значениями ключей.

Два типа индексов:

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

В этом руководстве вы узнаете:

  • Что такое индекс?
  • Что такое кластерный индекс?
  • Что такое некластеризованный индекс?
  • Характеристика кластерного индекса
  • Характеристики некластеризованных индексов
  • Пример кластерного индекса
  • Пример некластеризованного индекса
  • Различия между кластеризованным индексом и некластеризованным индексом
  • Преимущества кластерного индекса
  • Преимущества некластеризованного индекса
  • Недостатки кластерного индекса
  • Недостатки некластеризованного индекса

Что такое кластерный индекс?

Кластерный индекс - это тип индекса, который сортирует строки данных в таблице по их ключевым значениям. В базе данных есть только один кластеризованный индекс для каждой таблицы.

Кластерный индекс определяет порядок, в котором данные хранятся в таблице, которая может быть отсортирована только одним способом. Таким образом, для каждой таблицы может быть только один кластерный индекс. В СУБД обычно первичный ключ позволяет создать кластеризованный индекс на основе этого конкретного столбца.

Что такое некластеризованный индекс?

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

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

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

КЛЮЧЕВАЯ РАЗНИЦА

  • Кластерный индекс - это тип индекса, который сортирует строки данных в таблице по их ключевым значениям, тогда как некластеризованный индекс хранит данные в одном месте, а индексы - в другом.
  • Кластерный индекс хранит страницы данных в конечных узлах индекса, в то время как метод некластеризованного индекса никогда не сохраняет страницы данных в конечных узлах индекса.
  • Кластерный индекс не требует дополнительного дискового пространства, тогда как некластеризованный индекс требует дополнительного дискового пространства.
  • Кластерный индекс обеспечивает более быстрый доступ к данным, с другой стороны, некластеризованный индекс работает медленнее.

Характеристика кластерного индекса

  • Хранение данных по умолчанию и отсортированных данных
  • Используйте только один или несколько столбцов для индекса
  • Помогает хранить данные и индексировать вместе
  • Фрагментация
  • Операции
  • Сканирование кластерного индекса и поиск по индексу
  • Ключевой поиск

Характеристики некластеризованных индексов

  • Хранить только ключевые значения
  • Указатели на строки кучи / кластеризованного индекса
  • Разрешает вторичный доступ к данным
  • Мост к данным
  • Операции индексного сканирования и индексного поиска
  • Вы можете создать некластеризованный индекс для таблицы или представления
  • Каждая строка индекса в некластеризованном индексе хранит некластеризованное значение ключа и указатель строки.

Пример кластерного индекса

В приведенном ниже примере SalesOrderDetailID - это кластеризованный индекс. Пример запроса для получения данных

SELECT CarrierTrackingNumber, UnitPriceFROM SalesDataWHERE SalesOrderDetailID = 6

Пример некластеризованного индекса

В приведенном ниже примере некластеризованный индекс создается для OrderQty и ProductID следующим образом.

CREATE INDEX myIndex ONSalesData (ProductID, OrderQty)

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

SELECT Product ID, OrderQtyFROM SalesDataWHERE ProductID = 714

Различия между кластеризованным индексом и некластеризованным индексом

Параметры Кластеризованный Некластеризованный
Использовать для Вы можете сортировать записи и физически хранить кластерный индекс в памяти в соответствии с порядком. Некластеризованный индекс помогает создать логический порядок для строк данных и использует указатели для физических файлов данных.
Способ хранения Позволяет хранить страницы данных в конечных узлах индекса. Этот метод индексации никогда не сохраняет страницы данных в конечных узлах индекса.
Размер Размер кластерного индекса довольно велик. Размер некластеризованного индекса невелик по сравнению с кластеризованным индексом.
Доступ к данным Быстрее Медленнее по сравнению с кластеризованным индексом
Дополнительное дисковое пространство Не требуется Требуется хранить индекс отдельно
Тип ключа По умолчанию первичными ключами таблицы является кластерный индекс. Его можно использовать с уникальным ограничением для таблицы, которое действует как составной ключ.
Главная особенность Кластерный индекс может повысить производительность извлечения данных. Он должен быть создан на столбцах, которые используются в соединениях.

Преимущества кластерного индекса

Плюсы / преимущества кластерного индекса:

  • Кластерные индексы - идеальный вариант для диапазона или группировки с запросами типа max, min, count
  • В этом типе индекса поиск может идти прямо к определенной точке данных, так что вы можете продолжить чтение оттуда последовательно.
  • Метод кластерного индекса использует механизм местоположения для поиска записи индекса в начале диапазона.
  • Это эффективный метод поиска по диапазону, когда запрашивается диапазон значений ключа поиска.
  • Помогает минимизировать перенос страниц и увеличить количество обращений к кешу.

Преимущества некластеризованного индекса

Плюсы использования некластеризованного индекса:

  • Индекс без кластеризации помогает быстро извлекать данные из таблицы базы данных.
  • Помогает избежать накладных расходов, связанных с кластеризованным индексом.
  • Таблица может иметь несколько некластеризованных индексов в СУБД. Таким образом, его можно использовать для создания более одного индекса.

Недостатки кластерного индекса

Вот минусы / недостатки использования кластерного индекса:

  • Множество вставок в непоследовательном порядке
  • Кластерный индекс создает множество постоянных разделений страниц, включая страницу данных, а также страницы индекса.
  • Дополнительная работа для SQL для вставки, обновления и удаления.
  • Кластеризованному индексу требуется больше времени для обновления записей при изменении полей в кластеризованном индексе.
  • Листовые узлы в основном содержат страницы данных в кластеризованном индексе.

Недостатки некластеризованного индекса

Вот минусы / недостатки использования некластеризованного индекса:

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