У вас есть столбец foo
, определенного типа строки, с индексом в этом столбце. Вы хотите, чтобы SELECT
из таблицы WHERE
столбец foo
имеет префикс 'pre'
. Очевидно, что индекс должен помочь здесь.SELECT префикс строки с использованием индекса
Вот самый очевидный способ поиска префикса:
SELECT * FROM tab WHERE foo LIKE 'pre%';
К сожалению, это не получает оптимизировано для использования индекса (в Oracle или Postgres, по крайней мере).
Ниже, однако, делает работ:
SELECT * FROM tab WHERE 'pre' <= foo AND foo < 'prf';
Но есть ли более эффективные способы достигнуть этого, или есть способы сделать выше более изящным? В частности:
- Мне нужна функция от
'pre'
к'prf'
, но это должно работать для любой основной сортировки. Кроме того, это сложнее, чем выше, потому что, если искать, например,'prz'
, тогда верхняя граница должна быть'psa'
и так далее. - Могу ли я отрисовать это в хранимой функции/процедуре и все еще попадать в индекс? Значит, я мог написать что-то вроде
... WHERE prefix('pre', foo);
?
Ответы для всех СУБД оценены.
Что? К сожалению, это «оптимизируется для использования индекса»? Было так плохо? Конечно, «начинается с» поиска использует индекс, если это возможно. Слава богу, это так. Я вас неправильно понял? – alzaimar
lol, извините, я случайно слово «не»! отредактировано – jameshfisher
О, и вы имеете в виду, что есть конструкция «начинается с» в SQL? Я ничего не могу с этим поделать. – jameshfisher