Что такое индекс?
Индекс - это ключ, построенный из одного или нескольких столбцов в базе данных, который ускоряет выборку строк из таблицы или представления. Этот ключ помогает базе данных, такой как 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 для вставки, обновления и удаления.
- Кластеризованному индексу требуется больше времени для обновления записей при изменении полей в кластеризованном индексе.
- Листовые узлы в основном содержат страницы данных в кластеризованном индексе.
Недостатки некластеризованного индекса
Вот минусы / недостатки использования некластеризованного индекса:
- Некластеризованный индекс помогает хранить данные в логическом порядке, но не позволяет физически сортировать строки данных.
- Процесс поиска по некластеризованному индексу становится дорогостоящим.
- Каждый раз при обновлении ключа кластеризации требуется соответствующее обновление некластеризованного индекса, поскольку он хранит ключ кластеризации.