У меня SQL с параметрами, переданными пользователем. Пользователь может передать некоторый идентификатор или -1, что означает «неважно».
Можно написать запрос, как показано ниже, но можно использовать индекс?
SELECT *
FROM table
WHERE
((col1 = :param1) OR (:param1 = -1))
AND ((col2 = :param2) OR (:param2 = -1))
AND col3 STARTING 'A'
col1
, col2
и col3
проиндексированы. В FB 2.x при использовании OR
никогда не используйте индекс для col1 или col2. В FB 3, только если существуют первые (или вторые) условия, которые могут использовать индекс (индекс PLAN и натуральный), но с последним условием прекратите использовать индекс для col1 / 2.
Как я могу написать SQL без использования PLAN и использовать индекс для col1/2
и оставить возможность "выключить" условие, передав -1
?