Я думаю, что комментарий @Frank Farmer дает вам большую часть вашего ответа: для RDB вполне возможно использовать несколько индексов, даже если они не являются «составными».
Более конкретный вопрос имеет более сложный ответ: почему RDB не используют парадигму многоиндексного поиска Люсена?
Напомним, что Lucene использует инвертированный индекс со списком пропусков; Напомним также, что они эффективны только в том случае, если индекс чрезвычайно редок, а число терминов очень велико.
В типе столбца, в котором вы, вероятно, сделаете запрос, например where a = b
, число возможных b
s, вероятно, довольно мало, и, следовательно, индекс будет относительно плотным. Поэтому имеет больше смысла использовать растровые изображения (как это делает PostgreSQL) и получить ускорение параллелизма на уровне битов, чем хранить его в виде списка пропусков и иметь дело с погоней за указателями.
Следует отметить, что даже Lucene использует растровые изображения при комбинировании фильтров с запросами, поэтому мы могли бы эквивалентно спросить, почему Lucene не использует поиск Lucene. Я предполагаю, что растровые изображения меньше и, следовательно, с большей вероятностью помещаются в памяти.
Насколько мне известно, это не огромный выигрыш в производительности, поэтому вы, вероятно, не сможете привести очень веские аргументы в пользу растровых изображений или пропуска списков в общем случае. Но если бы мне пришлось угадывать, почему разработчики PostgreSQL пошли по пути растровых изображений, я думаю, это было бы так.