[MySQL]对json字段中的数组创建索引

Mysql中在json字段里存放数组时,如果需要快速查找到包含某个数字或字符串的数组,则需要在这个数组上建立索引,其`multi-valued` 索引能满足这种需求。

在已有表的情况下,执行以下语句创建一个数字数组索引:

ALTER TABLE 表名 ADD INDEX 索引名((CAST(json字段->'$.指向数组的对象名' AS UNSIGNED ARRAY)));

这个语句把json字段中的一个数组以无符号数组读出,并对每个数字进行索引,这样要寻找包含某数字的数组时,将使用索引提速。

如果数组内的成员都为字符串,可以这样创建索引(要注意,该表的排序规则需为`utf8mb4_0900_as_cs`,否则会报错):

ALTER TABLE 表名 ADD INDEX 索引名((CAST(json字段->'$.指向数组的对象名' AS CHAR(255) ARRAY)));

接下来使用类似这样的语句查找拥有某个数字的数组所在的条目

SELECT * FROM 表名 where 要找的数字 MEMBER OF(json字段->'$.指向数组的对象名');

或同时查找多个数字(字符串查找同理)

SELECT * FROM 表名 where JSON_CONTAINS(json字段->'$.指向数组的对象名', CAST('[1,2,3,4,5]' AS JSON));

使用了该索引后,作用在相关字段上的`JSON_OVERLAPS` 函数也会使用索引。

参考:https://dev.mysql.com/doc/refman/8.0/en/create-index.html



本文发布于 https://luojia.me

本站文章未经文下加注授权不得拷贝发布。

0 0 投票数
打分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论