Вы можете использовать Пакет runstats Тома Кайта для сравнения производительности различных реализаций - каждый из которых выполняется, скажем, 1000 раз в цикле. Например, я только что сравнил LIKE с SUBSTR, и он сказал, что LIKE был быстрее, занимая около 80% времени SUBSTR.
Обратите внимание, что "col LIKE '% xxx%'" отличается от "SUBSTR (col, 5,3) = 'xxx'". Эквивалент LIKE будет:
col LIKE '____xxx%'
с использованием одного '_' для каждого начального символа, который следует игнорировать.
Я думаю, в зависимости от того, как вы это сделаете, результаты будут схожими - это всегда включает в себя сканирование полной таблицы (или, возможно, полного индекса). Индекс на основе функций поможет, только если вы знали смещение подстроки во время создания индекса.
Я весьма обеспокоен, когда вы говорите, что «выбор будет использоваться для удаления каждые несколько секунд». Это скорее говорит о недостатке дизайна, но без знания требований сложно сказать.
UPDATE
Если значения ваших столбцов такие, как 'key1 = abc, key2 = def, keyn = ghi', возможно, вы могли бы подумать о добавлении еще одной таблицы, подобной этой:
create table key_values
( main_table_id references main_table
, key_value varchar2(50)
, primary key (fk_col, key_value)
);
create index key_values_idx on key_values (key_value);
Разделите значения ключей и сохраните их в этой таблице следующим образом:
main_table_id key_value
123 key1=abc
123 key2=def
123 key3=ghi
(Это можно сделать, например, в триггере AFTER INSERT на main_table)
Тогда ваше удаление может быть:
delete main_table
where id in (select main_table_id from key_values
where key_value = 'key2=def');