Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Виртуальные и невиртуальные вычисляемые столбцы / 7 сообщений из 7, страница 1 из 1
29.01.2019, 12:17
    #39766417
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
Доброго времени суток, ребята!

Подскажите, если я у вычисляемого столбца укажу, что он STORED, данный столбец будет рассчитываться и при добавлении строки и при обновлении строки или только при добавлении строки?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE GeographicalKoordinates (
  Id_GeographicalKoordinates int(11) NOT NULL AUTO_INCREMENT,
  Koordinate geometry NOT NULL,
  TypeKoordinates VARCHAR(50) CHECK (TypeKoordinates IN ('POINT', 'LINESTRING','POLYGON','Other', null)),
  SRID_ INT default null,
  RadiusAction double default NULL,
  AllKoordinatesArea text GENERATED ALWAYS AS (Buffer(Koordinate,RadiusAction)) STORED,
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
...
Рейтинг: 0 / 0
29.01.2019, 12:56
    #39766464
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
Vlad__i__mir,

вас интересует, есть ли оптимизация пропускающая вызов функции, если аргументы не изменились?
Сомневаюсь, честно говоря. Но точно не скажу.

Меня убивает привычка mysql делать крупные изменения в минорных релизах... Впрочем сомневаюсь, что у вас стоит ещё не вышедший 8.0.16, так что хочу отметить, что помимо неверного in (.. NULL) сравнения (такое выражение всегда NULL) ваш CHECK не проверяется никак. На случай если вы на него рассчитываете, а не просто так писали. Ну и для ограниченного списка строк лучше enum
...
Рейтинг: 0 / 0
29.01.2019, 12:56
    #39766465
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
Vlad__i__mirданный столбец будет рассчитываться и при добавлении строки и при обновлении строки или только при добавлении строки?Вы же указываете - GENERATED ALWAYS. Зачем спрашивать? Впрочем, эта характеристика чисто декоративная - её удаление ни на что не влияет... Да, пересчитывается при любом изменении.
Vlad__i__mirесли я у вычисляемого столбца укажу, что он STORED, данный столбец будет рассчитываться и при добавлении строки и при обновлении строки или только при добавлении строки?STORED влияет на совершенно иную характеристику.
...
Рейтинг: 0 / 0
29.01.2019, 12:57
    #39766466
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
Melkijвас интересует, есть ли оптимизация пропускающая вызов функции, если аргументы не изменились?
Сомневаюсь, честно говоря. Но точно не скажу.Пять минут эксперимента - и ответ готов. Впрочем, он и так известен - да, оптимизация есть.
...
Рейтинг: 0 / 0
29.01.2019, 13:15
    #39766491
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
Akina,

авторSTORED влияет на совершенно иную характеристику.

А я из интернета понял, что на эту. Поправьте меня пожалуйста и скажите на какую характеристику он влияет?
...
Рейтинг: 0 / 0
29.01.2019, 13:18
    #39766496
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
Melkij,
MelkijВпрочем сомневаюсь, что у вас стоит ещё не вышедший 8.0.16, так что хочу отметить, что помимо неверного in (.. NULL) сравнения (такое выражение всегда NULL) ваш CHECK не проверяется никак. На случай если вы на него рассчитываете, а не просто так писали.
поправьте меня пожалуйста, покажите как верно прописать?
...
Рейтинг: 0 / 0
29.01.2019, 13:36
    #39766513
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальные и невиртуальные вычисляемые столбцы
AkinaMelkijвас интересует, есть ли оптимизация пропускающая вызов функции, если аргументы не изменились?
Сомневаюсь, честно говоря. Но точно не скажу.Пять минут эксперимента - и ответ готов. Впрочем, он и так известен - да, оптимизация есть.
не, за 5 минут я могу не вспомнить, как функции в mysql пишутся. А ещё надо поставить mysql 8.0, в общем лениво.

Vlad__i__mirавторSTORED влияет на совершенно иную характеристику.

А я из интернета понял, что на эту. Поправьте меня пожалуйста и скажите на какую характеристику он влияет?
stored влияет на то, что значение вычисляется при записи и хранится физически.
В отличии от virtual, который вычисляется при обращении к нему и никак не хранится.

Vlad__i__mirMelkij,
MelkijВпрочем сомневаюсь, что у вас стоит ещё не вышедший 8.0.16, так что хочу отметить, что помимо неверного in (.. NULL) сравнения (такое выражение всегда NULL) ваш CHECK не проверяется никак. На случай если вы на него рассчитываете, а не просто так писали.
поправьте меня пожалуйста, покажите как верно прописать?
Никак, т.к. в вышедших версиях mysql check банально нет. Синтаксически он есть, но полностью игнорируется.
А в целом выражение, если я верно поминаю что вы хотели получить:
Код: sql
1.
TypeKoordinates is null or TypeKoordinates IN ('POINT', 'LINESTRING','POLYGON','Other')


Или
Код: sql
1.
TypeKoordinates IN ('POINT', 'LINESTRING','POLYGON','Other')


т.к. для check null - допустимое значение по стандарту. В отличии от where, где null рассматривается как повод исключить строку.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Виртуальные и невиртуальные вычисляемые столбцы / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]