Почему функции замедляют запросы при просмотре mysql? - PullRequest
2 голосов
/ 04 мая 2020

Я заметил следующее: я создаю представление для таблицы, в которой некоторые столбцы содержат значения csv. Я хочу разделить эти CSV-файлы на лету и сделать их отдельными столбцами в представлении.

Для начала я просто создал функцию, которая сама возвращает входное значение:

CREATE FUNCTION `split`(`csv` TEXT, `pos` INT)
RETURNS varchar(255) CHARSET utf8
return csv

Теперь интересная часть: как только я использую функцию split в моей таблице CREATE VIEW AS SELECT split(mytable.csv, 3) as split FROM mytable, время выполнения запросов SELECT удваивается (даже если я пока просто возвращаю само значение!).

Разве это не странно? Или это должно работать так, как mysql не может оптимизировать запросы при использовании функций?

Позже я хочу заменить функцию следующим образом. Но это не имеет значения для основной части вопроса:

CREATE FUNCTION split(csv TEXT, pos INT)
RETURNS varchar(255) CHARSET utf8
return substring_index(substring_index(csv, ',', pos), ',', -1)

Тогда split('my,example,split,string', 2) извлечет «пример».

...