Итак, я экспериментирую с колонкой json. Mysql 8.0.17 должен работать с индексами с несколькими значениями JSON, например:
CREATE INDEX data__nbr_idx ON a1( (CAST(data->'$.nbr' AS UNSIGNED ARRAY)) )
У меня есть категории столбцов с JSON, как это ["books", "одежда"]. Мне нужно получить все товары из категории "книги". Я могу использовать "json_contains" или новый "member".
SELECT * FROM products WHERE JSON_CONTAINS(categories, '\"books\"')
SELECT * FROM products WHERE "books" MEMBER OF(categories)
И это работает. Проблема в том, что, конечно, EXPLAIN покажет, что запросы выполняют полное сканирование таблицы, и из-за этого он медленный.
Поэтому мне нужен какой-то индекс.
Я изменил пример индекса, заменив его Тип "unsigned" с "char (32), так как мои категории - строки, а не числа. Я не могу найти никакого примера для этого в Google, поэтому я предположил, что char () будет в порядке, но это не так.
Это мой запрос индекса:
CREATE INDEX categories_index ON products((CAST(categories AS CHAR(32) ARRAY)))
также пытался
CREATE INDEX categories_index ON products((CAST(categories->'$' AS CHAR(32) ARRAY)))
, но при выборках все еще выполняется полное сканирование таблицы. Что я делаю неправильно? Как правильно индексировать столбец json без использования виртуальные столбцы?