Я заметил следующее: я создаю представление для таблицы, в которой некоторые столбцы содержат значения 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)
извлечет «пример».