MySQL 8 中索引 JSON 列

2024-03-10

所以我正在尝试 json 列。 Mysql 8.0.17 应该可以使用多值 JSON 索引,如下所示:

CREATE INDEX data__nbr_idx ON a1( (CAST(data->'$.nbr' AS UNSIGNED ARRAY)) )

我有像这样的 JSON 列类别 [“书籍”,“衣服”]。 我需要从“书籍”类别中获取所有产品。我可以使用“json_contains”或新的“成员”。

SELECT * FROM products WHERE JSON_CONTAINS(categories, '\"books\"')
SELECT * FROM products WHERE "books" MEMBER OF(categories)

它有效。问题是 EXPLAIN 当然会显示有查询正在进行全表扫描,因此速度很慢。

所以我需要一些索引。

我通过用“char(32)”替换“unsigned”类型来更改索引示例,因为我的类别是字符串而不是数字。我在谷歌中找不到任何示例,所以我认为 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 列?


对于多值 json 索引,json 路径必须匹配,因此使用索引

CREATE INDEX categories_index 
ON products((CAST(categories->'$' AS CHAR(32) ARRAY)))

您的查询还必须使用路径->'$'(或同等的json_extract(...,'$'))

SELECT * FROM products WHERE "books" MEMBER OF(categories->'$')

让它保持一致,它应该可以工作。

似乎没有显式路径的索引无法按预期工作,因此您必须指定->'$'如果您想使用整个文档。这可能是一个错误,但也可能是强制转换或自动强制转换为数组的预期行为。如果您指定路径,您就会安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 8 中索引 JSON 列 的相关文章

随机推荐

  • 终端进程命令无法启动退出代码:0 和退出代码:2

    Visual Studio 代码终端无法工作 捷径ctrl 因为终端不工作 Error The terminal process terminated with exit code 0 终端进程命令 C WINDOWS System32 W
  • t.Cleanup 有什么用?

    问题 我想知道的用例t CleanupGo1 14中引入 与使用 defer 相比 t Cleanup 有何便利 https golang org pkg testing T Cleanup https golang org pkg tes
  • 图像文件的加密与解密

    结合我的另一个question https stackoverflow com questions 12131627 image encryption decryption 并且在更改了这一小部分代码之后 FileOutputStream
  • 使用 Twilio 和 SIP 进行 SMS 消息传递

    我正在尝试使用 Twilio 在我的 iPhone 上发送和接收短信 我已设置呼入和呼出呼叫遵循这些说明 https stackoverflow com questions 48346740 how do i forward a twili
  • Azure Functions 错误 - 无法将参数绑定到字符串类型

    我正在尝试使用 Azure 函数将文件保存到 FTP json是这样的 type apiHubFile name outputFile path folder ps DateTime txt connection ftp FTP direc
  • 如何读入边列表以制作 scipy 稀疏矩阵

    我有一个大文件 其中每行都有一对 8 个字符串 就像是 ab1234gh iu9240gh 在每行上 这个文件实际上代表了一个图 每个字符串都是一个节点 ID 我想读入文件并直接制作一个 scipy 稀疏邻接矩阵 然后 我将使用 pytho
  • “没有这样的模块‘Alamofire’”Xcode 无法识别 Alamofire 框架

    我意识到在其他问题中也提出了同样的错误 例如here https stackoverflow com questions 25817479 cannot install alamofire in new xcode project no s
  • CakePHP 仅在输入数据时进行表单验证

    我正在尝试上传其中一个模特的照片 并且当我进入编辑模式时 当用户只想编辑与该记录相关的文本时 它仍然要求我上传照片 以下是我的验证规则 display photo gt array uploadError gt array rule gt
  • 读取音频文件信息php

    如何从声音文件中读取比特率 长度等信息 不同的文件格式 mp3 wmw 等 我想那里有一些图书馆 课程 也许我可以尝试一下 有什么建议么 getID3 http getid3 org 是一个 PHP 脚本 可以从 MP3 和其他多媒体文件格
  • Android ProgressBar 的样式类似于 SwipeRefreshLayout 中的进度视图

    I use android support v4 widget SwipeRefreshLayout在我的 Android 应用程序中 它包裹着一个ListView 列表视图的内容是从服务器下载的 当用户向下滑动以从服务器重新加载数据时 会
  • Docker - 无法从容器内部 ping 主机子网上的任何内容

    我有一台 IP 地址为 192 168 11 10 的 Mac 主机 我有一个使用默认网络配置运行的 docker compose 项目 我需要从 docker 容器内连接到 IP 地址 192 168 11 11 上的设备 从容器内 我可
  • jUnit 在多种文化中测试 Double.toString

    我有一个开源库 其中有大量比较字符串形式的数字的单元测试 这些测试通过良好en GB en US以及其他文化中数字通常以以下形式书写1 234 00 然而 在德国和法国等文化中 这些值的格式不同 因此测试会失败 如何强制 jUnit 测试运
  • R - 查找包含所有字符串/模式的所有向量元素 - str_detect grep

    样本数据 files in path c a 4 0 name 2015 NY RDS b 4 0 name 2016 CA RDS c 4 0 name 2015 PA RDS strings to find c 4 0 PA 我想要一个
  • 多个表行作为backbone.js 视图?

    所以我有一个数据网格 网格中的每个项目都有一个关联的模型和视图 我需要将每个项目渲染为two表行以实现所需的 UI 不 这不是我的设计 第一次尝试 在视图中render 方法 只需渲染两行并将它们添加到this el 然后我将每个视图附加到
  • 将向量转换为向量(优雅的方式)

    我想知道是否有一种优雅的方式或内置函数来转换vector
  • 在绑定到 Winforms 数据源的 gridview 的 bool 列中显示是/否?

    我有一个绑定到数据源 Windows 窗体 VB NET 的 gridview 其中一列是布尔类型的属性 我想在该列中显示 是 否 而不是 0 1 或 真 假 这可能吗 您可以编辑绑定列的显示吗 我遇到了同样的问题 不幸的是我没有找到优雅的
  • 使用 Tensorflow 对象检测 api 打乱训练数据集

    我正在使用 Faster RCNN 模型和 Tensorflow 对象检测 API 来开发徽标检测算法 我的数据集按字母顺序排列 因此有一百个阿迪达斯徽标 然后是一百个苹果徽标等 我希望在训练时对其进行洗牌 我在配置文件中添加了一些值 tr
  • UIResponder 问题

    今晚我一直在与 UIResponder 作斗争 这是我的困境 如果我输入 BOOL canBecomeFirstResponder return YES 到我的 mainViewController 然后我可以获得摇动事件 void mot
  • 无法打开流:是一个目录

    我在尝试使用 php 将上传的文件从临时文件夹移动到所需的文件时收到以下警告 警告 move uploaded file test function move uploaded file 无法打开流 是第 69 行 home filenam
  • MySQL 8 中索引 JSON 列

    所以我正在尝试 json 列 Mysql 8 0 17 应该可以使用多值 JSON 索引 如下所示 CREATE INDEX data nbr idx ON a1 CAST data gt nbr AS UNSIGNED ARRAY 我有像