B-Tree против растровых индексов базы данных - PullRequest
17 голосов
/ 03 марта 2012

Может кто-нибудь объяснить разницу между индексами растрового изображения и дерева b.в каких ситуациях вы будете использовать оба из них?Каковы преимущества / недостатки каждого.

Ответы [ 2 ]

25 голосов
/ 03 марта 2012

Из википедии: B-Trees и растровые индексы .Варианты использования:

  • B-деревья - это типичный тип индекса, используемый при выполнении CREATE INDEX ... в базе данных:

    1. Они очень быстрые, когда вывыбирают только небольшое подмножество данных индекса (обычно 5% -10% макс.)
  • Они работают лучше, когда у вас есть много различных индексированных значений.
  • Можно объединить несколько индексов B-Tree, но более простые подходы часто более эффективны.
  • Они бесполезны, когда существует несколько различных значений для индексированных данных или когда вы хотите получить большое (обычно> 10%) подмножество данных.
  • Каждый индекс B-Tree налагает небольшое наказание при вставке / обновлении значений в индексированной таблице.Это может быть проблемой, если в очень загруженной таблице много индексов.
  • Растровые индексы - это более специализированный вариант индекса:

    1. Они кодируют индексированные значения в виде растровых изображений и поэтому занимают очень мало места.
    2. Они имеют тенденцию работать лучше, когда имеется несколько отдельных индексированных значений
    3. Оптимизаторы БД могут очень легко комбинировать несколько проиндексированных битовых карт, что позволяет эффективно выполнять сложные фильтры в запросах.
    4. Они очень неэффективны при вставке / обновлении значений.


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

В качестве очень краткой сводки: используйте индексы B-Tree (индекс "по умолчанию" в большинстве баз данных), если вы не являетесь разработчиком хранилища данных и знаете, вы получите преимущество для индекса растрового изображения.

0 голосов
/ 16 марта 2019

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

Благодаря созданию индекса для столбцов с нулевым значением (column_name, 1) (или некоторой другой константы) теперь в него включены, что позволяет оптимизатору использовать запрос при выполнении запросов "is null".

Индекс растрового изображения, в отличие от индекса дерева B *, автоматически включает нулевые значения. Это означает, что растровые индексы могут использоваться оптимизатором при оценке предикатов "is null".

Однако растровые индексы могут привести к проблемам параллелизма, возможно, блокируя другие DML в той же таблице. Поэтому этого следует избегать в приложениях OLTP. Для растровых индексов также требуется Enterprise Edition, поэтому при их использовании могут возникнуть проблемы с лицензированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...