之前有一篇文章写的是在mysql中使用json字段时为其中的数组创建索引,它有个问题就是当该字段本身存放的就是一个数组时(不放在对象下的属性中),这样创建的索引不生效,原因不明。因此要使索引生效需要把数组放在对象下的一个属性里。
现在我发现,如果想要在mysql中存放一个可以索引的json数组,其实根本不需要使用json字段,即使是普通的字符串字段存放的json数组也可以用同样的方法进行索引。
比如现在有一个字段`tags`,类型为`mediumtext`,在其中一行存放了以下字符串:
[1,2,3,4,5,6,7,8,9,10]
然后将其解析为json来创建多值索引:
ALTER TABLE 表 ADD INDEX tag_idx((cast(JSON_EXTRACT(tags, '$') as unsigned array)))
接着在查询数据时也把该字段解析为json进行使用:
SELECT * FROM 表 WHERE JSON_OVERLAPS('[1,2]',JSON_EXTRACT(tags, '$'))
在这样的查询中,mysql就会使用到这个json数组的索引,因此如果一个数据仅仅是为了作为数组使用的话就没必要套个对象放进json字段了,使用普通字符串字段即可。