Я столкнулся со странной ситуацией, когда включение значения в мой список выбора определяет, будет ли мой индекс использоваться при поиске.
У меня есть индекс, созданный для cTable (cf1, cf2, cf3).
В этом первом случае сканирование таблицы выполняется на cTable:
select
a.bkey
,c.mappedvalue
from
aTable a
LEFT JOIN bTable b
ON b.bkey = a.bkey
LEFT JOIN cTable c ON (
c.[cf1] = b.[cf1] and
c.[cf2] = b.[cf2] and
c.[cf3] = a.[cf3]
)
;
Однако, когда я удаляю столбец сопоставленного значения из списка выбора, используется индекс:
select
a.bkey
--,c.mappedvalue
from
aTable a
LEFT JOIN bTable b
ON b.bkey = a.bkey
LEFT JOIN cTable c ON (
c.[cf1] = b.[cf1] and
c.[cf2] = b.[cf2] and
c.[cf3] = a.[cf3]
)
;
Кто-нибудь сталкивался с этим? Оптимизатор просто решает избежать индекса?