2013-08-04 6 views
0

В этом учебнике по youtube hereСоздает ли растровый индекс реплику исходной таблицы?

Кажется, что индекс Bitmap всегда будет создавать реплику всей таблицы при создании индекса. Поскольку он создает индекс и против каждой строки, он ставит 0 или 1. Неужели я ошибаюсь? Отметим, что в конце учебника кажется, что индекс растрового изображения не может работать на операторе! =. Я думал, что = и != кажется таким же, как у POV индексации.

ответ

2

Каждая строка в таблице представлена ​​в одном бите (то есть 0 или 1), по меньшей мере для одного отдельного значения . Я не уверен, что можно считать репликой всей таблицы, так как это означает, что все данные реплицируются, а данные в других столбцах, очевидно, отсутствуют. Но он содержит данные для всей таблицы, так как каждая строка представлена ​​(возможно, несколько раз, все, кроме одного, с битом, установленным на ноль).

concepts guide объясняет, что происходит:

Каждый бит в битовой карте соответствует возможному ROWID. Если бит установлен в , то строка с соответствующей строкой содержит значение ключа. Функция сопоставления преобразует позицию бита в реальный rowid, поэтому индекс растрового изображения обеспечивает те же функции, что и индекс B-дерева , хотя он использует другое внутреннее представление.

storage structure is also explained.

В сочетании с этим, когда вы думаете об этом как о двухмерном массиве, становится понятнее, почему каждая строка должна быть представлена ​​для каждого значения. В документе example в документации значение для каждой строки должно быть представлено одним из различных значений, поэтому «столбец» массива должен иметь ровно один бит, установленный в 1. Нет способа иметь столбец ', то есть все нули - если столбец был нулевым, то null было бы другим значением в массиве, а в нулевых столбцах в таблице был бы установлен бит в 1 в индексе - для строки в таблице, так что там не было бы имеют смысл до нет есть все представленные строки.

У вас может быть массив 'column', который является всеми нулями, но только для строк, которые не существуют. «Каждый бит в битмапе соответствует возможному rowid», не обязательно к фактической строке. Из описания хранилища вы можете видеть, что растровые изображения сохраняются в диапазоне от rowid s, а значение rowid в этом диапазоне может не указывать на фактическую строку (в этой таблице).

И вот что делает проверку на неравенство проблемой. Вы не можете просто взглянуть на одну «строку» массива и сказать, что все в строке 'M', которая установлена ​​в ноль, соответствует != 'M', потому что rowid, который представляет бит, на самом деле может не быть строкой в ​​таблице. В некотором смысле, бит, установленный в ноль, не говорит вам ничего определенного; только бит установлен в 1. Таким образом, для условия неравенства нужно проверить весь индекс, чтобы найти значения, равные 1 для любого другого значения.


1 - Логически каждая строка представлена ​​для каждого значения, но для хранения данных, пример в документации показывает различные диапазоны rowid для различных значений; Я думаю, нет смысла хранить индексные данные для диапазона, где все биты равны нулю, только для диапазонов, где по крайней мере один бит равен 1. Но все строки по-прежнему представлены, по меньшей мере, в одной записи индекса, поскольку бит равен 1 где-то. Я, возможно, слишком много читаю в их концептуальной картине того, что хранится.