ブルームフィルタインデックス
ブルームフィルタ、つまり「この行は確実に一致しない」か「一致するかもしれない」を素早く答える確率的データ構造に基づくインデックス。PostgreSQLでは拡張(bloom)で、列が多く、任意の組み合わせで検索されるテーブルに向く。
解決する問題はこうだ。10列あって部分集合を変えながら検索すると、B-treeでは多数のインデックスが要る。ブルームインデックスは全列をコンパクトにまとめ、一致しない行の大半を除外する。残った「かもしれない」は本体テーブルで確認する。トレードオフは偽陽性(偽陰性は決してない)で、探索範囲の絞り込みには向くが、厳密な検索には向かない。内部でも使われ、ClickHouse、Parquet、LSMツリー(RocksDB、Cassandra)はディスクI/Oなしにデータブロック/SSTableを読み飛ばすためにブルームフィルタを持つ。サイズの調整で偽陽性率を制御できる。