mysql - 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)) )
但它给了我错误。有没有办法做到这一点?
此致。
解决方案
推荐阅读
- android - 迁移到材料设计后未找到 Widget.AppCompat.TextView
- powershell - 将成员添加到自定义类的问题
- postgresql - Power BI - 数据加载错误 - OLE DB 或 ODBC 错误:[DataSource.Error] PostgreSQL:从流中读取时出现异常
- mysql - TypeORM:使用 groupBy 子句提取最新值
- javascript - 文件数据未在 js drop 事件中传递
- angular - @ViewChild 在 ngAfterViewInit - Ionic5 - Angular6 中访问孩子是空的
- python - 在 Mac (macOS Catalina 10.15) 上使用 python 中的 opencv 打开笔记本电脑摄像头的问题
- python - 保存循环函数的结果
- python - 如何在 Django 视图中解码 SAMLResponse?
- angular - 使用 Angular Material 9 的 TAB 创建自定义组件时出错