/**
* A two-level index implementation. Both levels are binary search indexes.
*/
- kTwoLevelIndexSearch((byte) 2);
+ kTwoLevelIndexSearch((byte) 2),
+ /**
+ * Like {@link #kBinarySearch}, but index also contains first key of each block.
+ * This allows iterators to defer reading the block until it's actually
+ * needed. May significantly reduce read amplification of short range scans.
+ * Without it, iterator seek usually reads one block from each level-0 file
+ * and from each level, which may be expensive.
+ * Works best in combination with:
+ * - IndexShorteningMode::kNoShortening,
+ * - custom FlushBlockPolicy to cut blocks at some meaningful boundaries,
+ * e.g. when prefix changes.
+ * Makes the index significantly bigger (2x or more), especially when keys
+ * are long.
+ */
+ kBinarySearchWithFirstKey((byte) 3);
/**
* Returns the byte value of the enumerations value