Индексирование массива в столбце MySQL JSON с элементами переменной длины - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь индексировать json массивы, где содержимое является строками переменной длины, и я не могу понять, если это возможно, не говоря уже о масштабируемости.

Очень похожий вопрос об индексации JSON данных здесь используется новый индекс с несколькими значениями: Индексирование JSON столбец в MySQL 8

Синтаксис этого вопроса выполняется, но использование CHAR мне не подходит и заканчивается на ошибка в любом случае. После изменения имен и корректировки длины CHAR для моих данных:

ALTER TABLE catalog ADD INDEX idx_30144( (CAST( j_data->>'$."30144"' AS char(250) ARRAY)) );

Я получаю эту ошибку

1034 - Incorrect key file for table 'catalog'; try to repair it

Пробую это:

ALTER TABLE catalog ADD INDEX idx_30144( (CAST( j_data->>'$."30144"' AS varchar(250) ARRAY)) );

Выдает эту ошибку:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar(250) ARRAY)) )' at line 1

Это таблица InnoDB, поэтому очевидно, что ошибка 1034 не является точной. Это завершается примерно за 2 секунды, поэтому, пока в может не хватает места, это происходит слишком быстро, чтобы увидеть это, и на диске свободно 350 ГБ.

У меня более 200 JSON таких узлов, которые я хотел бы проиндексировать, в идеале. Если это огромная память, я могу быть доволен их подмножеством, но мне нужно знать, возможно ли это в первую очередь.

1 Ответ

0 голосов
/ 13 апреля 2020

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

Как

CREATE TABLE jempn (
  id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  j_data JSON DEFAULT NULL,
  g varchar(250) GENERATED ALWAYS AS (j_data->'$."30144"' ) STORED,
  INDEX idx_30144 (g)
) ENGINE=INNODB;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...