Поиск текста в столбце ужасно неэффективен и недостаточно масштабируется (для каждой строки функции, как правило, имеют эту проблему).
То, что вы должны делать торгуется на диске (который является дешевым) для исполнения (что никогда дешевы), создав новый столбец, hasNumerics
, например, добавление индекса к нему, а затем с помощью вставки/обновления триггер, чтобы установить его на основе данных, поступающих в настоящий столбец.
Это означает, что расчет делается только , когда строка создается или изменения, не каждый раз, когда вы извлечь данные. Базы данных почти всегда читаются гораздо чаще, чем они написаны, и использование этого решения позволяет амортизировать стоимость вычисления по многим операциям select
.
Затем, когда вы хотите, чтобы ваши данные, просто используйте:
select * from mytable where hasNumerics = 1; -- or true or ...
и смотреть его оставить регулярный запрос экспрессии или like '%...%'
уродство в своей пыли.
Я буду использовать это, спасибо за ответ – Ivo