首页 > 解决方案 > Mysql - 返回目标 JSON 文档中包含 JSON 文档的行数

问题描述

data我在 mysql 中有带有 json 列的表。在数据列中,我期望为关键“产品”提供一些产品数组。我正在分析获取产品数组中包含指定值的行数的最佳和最快方法。

这是我到目前为止所尝试的,在 100 万行中给出了给定的结果:

SELECT COUNT(*) as "cnt" FROM `components` `c`
WHERE (JSON_CONTAINS(`c`.`data`, '"some product from array"', '$."products"') = true) 

第一个大约需要 4 秒

SELECT COUNT(*) as "cnt" FROM `components` `c`
WHERE (JSON_SEARCH(`c`.`data`, 'one', 'some product from array', null, '$."products"') is not null)

第二个需要〜2,5秒

有没有更快的方法可以获得这个行数?

我注意到从 Mysql 8.0.17 开始可以在 JSON 列上添加多值索引。是否可以在字符串数组上创建多值索引。我试过类似的东西:

CREATE INDEX products ON components ( (CAST(data->'$.products' AS VARCHAR(255) ARRAY)) ) 

但它给了我错误。有没有办法做到这一点?

此致。

标签: mysqljson

解决方案


推荐阅读