Рассмотрим этот пример:
CREATE FUNCTION get_age(date_of_birth DATE)
RETURN NUMBER AS
BEGIN
RETURN
TRUNC(MONTHS_BETWEEN(SYSDATE, date_of_birth)/12);
END
Следующий запрос не может быть проиндексирован, поскольку get_age()
не является детерминированным.
SELECT first_name, last_name, get_age(date_of_birth)
FROM employees
WHERE get_age(date_of_birth) = 42
Как вы по-прежнему можете использовать индекс для оптимизации запроса для всех 42-летних сотрудников?