прямо сейчас у меня есть следующий запрос в хранимой процедуре.
select * from table A where A.indexed_char_column LIKE :param1
: param1 может содержать любой тип подстановочных знаков, но иногда это может и не быть.«% abcdef%» обычно требует полного сканирования таблицы, а «abcdef» должен выполнить сканирование диапазона индекса.Поэтому я бы хотел, чтобы механизм SQL использовал два разных плана выполнения в зависимости от этого параметра.
Можно ли как-нибудь сделать это возможным?Я хотел бы получить ответы как для Oracle 11gr2, так и для SQL Server 2005. Я думаю, если бы я мог включить в запрос фиктивный параметр (например, комментарий или что-то в этом роде), который заставляет механизм SQL думать о двух запросах, которые фактически идентичныне быть идентичным.
select /* use table scan */ * from table A where A.indexed_char_column LIKE :param1
select /* use index */ * from table A where A.indexed_char_column LIKE :param1
Но я не знаю, как это сделать?Любые другие предложения?Должен ли я просто использовать две хранимые процедуры?