Лучшее представление индекса растрового изображения, если дан пример выше:
Identifier Gender RowID
1 Female R1
2 Male R2
3 Male R3
4 Unspecified R4
5 Female R5
индекс растрового изображения в столбце пола будет (концептуально) выглядеть следующим образом:
Gender R1 R2 R3 R4 R5
Female 1 0 0 0 1
Male 0 1 1 0 0
Unspecified 0 0 0 1 0
Битовые индексы используются, когда число различных значений в столбце относительно мало (рассмотрим противоположное, где все значения уникальны: индекс растрового изображения будет таким же широким, как каждая строка, и до тех пор, пока это как одна большая единичная матрица.)
Таким образом, с этим индексом создается запрос, подобный
SELECT * FROM table1 WHERE gender = 'Male'
база данных ищет совпадения в значениях полов в индексе, находит все строки, в которых бит был установлен в 1, а затем отправляется и получает результаты таблицы.
Запрос типа:
SELECT * FROM table1 WHERE gender IN ('Male', 'Unspecified')
получит 1 бит для Male, 1 бит для Unspecified, выполнить побитовое ИЛИ, а затем перейти к строкам, где результирующие биты равны 1.
Таким образом, преимуществами использования индекса растрового изображения над индексом дерева ab * являются хранение (при низкой мощности, битовые индексы довольно компактны) и возможность выполнять побитовые операции перед разрешением реальных строк, которые могут быть довольно быстрыми.
Обратите внимание, что растровые индексы могут влиять на производительность при вставках / удалениях (концептуально вы добавляете / удаляете столбец в / из растрового изображения и изменяете его соответствующим образом ...), и можете вызвать много споров в качестве обновления строка может заблокировать всю соответствующую запись растрового изображения, и вы не можете обновить другую строку (с тем же значением растрового изображения), пока первое обновление не будет зафиксировано / откатано.