У меня есть таблица с json столбцом data
в mysql. В столбце данных я ожидаю иметь некоторый массив продуктов для ключевых «продуктов». Я анализирую лучший и самый быстрый подход, чтобы получить количество строк, содержащих указанное значение в массиве продуктов.
Это то, что я пробовал до сих пор, на 1 млн строк с данными результатами:
SELECT COUNT(*) as "cnt" FROM `components` `c`
WHERE (JSON_CONTAINS(`c`.`data`, '"some product from array"', '$."products"') = true)
первый занимает ~ 4 се c
SELECT COUNT(*) as "cnt" FROM `components` `c`
WHERE (JSON_SEARCH(`c`.`data`, 'one', 'some product from array', null, '$."products"') is not null)
второй занимает ~ 2,5 се c
Есть ли какой-нибудь более быстрый способ получить это число строки?
Я заметил, что из Mysql 8.0.17 можно добавлять многозначные индексы для столбца JSON. Можно ли создать многозначный индекс по массиву строк. Я пробовал что-то вроде:
CREATE INDEX products ON components ( (CAST(data->'$.products' AS VARCHAR(255) ARRAY)) )
, но это дает мне ошибку. Есть ли способ совершить sh это?
С наилучшими пожеланиями.