Если удаленных записей будет гораздо больше, чем живых (или наоборот), то запрос индекса наименее используемого типа выиграет от индекса.
Скажем, если 1%
записей будет удалено ивы запрашиваете
SELECT *
FROM records
WHERE isDeleted = 1
, оптимизатор выберет индекс, а для этого запроса:
SELECT *
FROM records
WHERE isDeleted = 0
будет использоваться полное сканирование таблицы.
Есликоличество ни удаленных, ни сохраненных записей ниже критической точки (которая зависит от размера записи и других вещей, но, как правило, можно считать 10%
), тогда индекс, вероятно, никогда не будет использоваться.