Каждая строка в таблице представлена в одном бите (то есть 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 где-то. Я, возможно, слишком много читаю в их концептуальной картине того, что хранится.