Очень часто встречается заблуждение, что если есть индекс, то он используется всегда.
Ничего подобного. Более того, даже в одинаковом запросе, но с разными данными, индекс может как учитываться, так и нет.
Например, имеем мы миллион записей с булевым полем, и индекс по нему (глупость, конечно, но для примера в самый раз). И из этого миллиона пять записей имеют в этом поле true, а остальные false.
Так вот, select * from table where boolField = true индекс задействует, а вот select * from table where boolField = false - уже нет. Потому что, с точки зрения оптимизатора, искать сначала в индексе, а потом в таблице оправдано для пяти позиций, но совершенно избыточно делать практически одну и ту же работу для 999 995 записей.
Это, конечно, на пальцах, но смысл примерно такой.