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

Вы также можете попробовать интерпретатор BeanShell :

Interpreter interpreter = new Interpreter();
interpreter.eval("result = (7+21*6)/(32-27)");
System.out.println(interpreter.get("result"));

30
задан Moeb 10 August 2010 в 19:17
поделиться

3 ответа

Лучшее представление индекса растрового изображения, если дано приведенное выше пример:

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 * - это хранилище (с низкой мощностью, растровые индексы довольно компактны) и возможность выполнять побитовые операции перед разрешением фактических идентификаторов строк, что может быть довольно быстрым.

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

35
ответ дан 27 November 2019 в 23:56
поделиться

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

select * from persons where
                      gender = 'male' and 
                      (eye_colour = 'blue' or hair_colour = 'blonde')

сначала будет выполнять побитовое или между индексом eye_colour ['blue'] и индексом hair_colour ['blonde'] и, наконец, поразрядным, и между результатом и индексом пола ['male']. Эта операция выполняется очень быстро как с точки зрения вычислений, так и с точки зрения ввода-вывода.
Результирующий битовый поток будет использоваться для выбора фактических строк.

Растровые индексы обычно используются в «звездообразных соединениях» в приложениях хранилищ данных.

12
ответ дан 27 November 2019 в 23:56
поделиться

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

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

Просто подумайте о том, как это работает под капотом, чтобы понять, почему это происходит быстрее. Логически бит является либо истинным, либо ложным. Если вы хотите выполнить запрос с использованием предложения WHERE, это в конечном итоге будет оценивать как истинное, так и ложное значение для записей, чтобы определить, включать ли их в ваши результаты.

Предисловие - все остальное предназначено для простых людей и не технических специалистов.

Итак, следующий вопрос: что нужно, чтобы получить истинное значение? Даже сравнение числовых значений означает, что компьютер должен ...

  1. Выделить память для значения, которое вы хотите оценить
  2. Выделить память для контрольного значения
  3. Присвоить значение каждому (посчитайте это как два шага)
  4. Сравните два - для числа это должно быть быстро, но для строк нужно сравнить больше байтов.
  5. Присвойте результатам значение 0 (ложь) или 1 (истина).

повторите, если вы используете предложение where, состоящее из нескольких частей, например Where "this = this AND that = that"

  1. , выполняют побитовые операции с результатами, полученными на этапе 5
  2. Найдите окончательное значение
  3. ] освободить память, выделенную на шагах 1-3

Но, используя поразрядную логику, вы просто смотрите на значения 0 (ложь) и 1 (истина). 90% накладных расходов на работу по сравнению устраняются.

4
ответ дан 27 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: