Mysql - Возвращает количество строк, в которых JSON документ содержится в целевом JSON документе. - PullRequest
0 голосов
/ 13 марта 2020

У меня есть таблица с 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 это?

С наилучшими пожеланиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...