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