Конечно, вы понимаете, что запрос бессмысленный, сравнивая age
с sal
(что, вероятно, является зарплатой). Тем не менее, два индекса подходят для:
SELECT e.id
FROM Emp e
WHERE e.age > (select max(e2.sal) from Emp e2);
Я добавил псевдонимы таблиц, чтобы подчеркнуть, что запрос дважды ссылается на таблицу Emp
.
Чтобы получить максимум sal
из таблицы, вы хотите индекс на emp(sal)
. Максимум - это простая операция поиска по индексу.
Тогда вы хотите сравнить это с age
. Ну, для сравнения с age
вы хотите индекс на emp(age)
. Это совершенно отдельная ссылка на emp
, которая не имеет ссылки на sal
, поэтому вы не можете поместить два столбца в один индекс.
Индекс на age
может быть необязательным. Запрос может возвращать много строк - и таблицы, которые возвращают много строк, обычно не получают вторичного индекса. Единственный случай, когда он может извлечь выгоду из индекса, это если age
является кластеризованным индексом (то есть обычно первым столбцом в первичном ключе). Однако я бы не рекомендовал такую структуру индексации.