MySQL如何索引JSON数组?
Posted
技术标签:
【中文标题】MySQL如何索引JSON数组?【英文标题】:MySQL How to Index a JSON array? 【发布时间】:2020-08-19 00:06:02 【问题描述】:我有一个带有一维数组的 JSON 字段。事实上,在这个字段中,我有一些 ID 的列表,如下所示:
[347470, 162063, 17315, 346852, 174776, 295865, 7833, 136813]
在我的查询中,我这样引用这个字段:
... AND JSON_CONTAINS(`users_actions`, 174776)=0
我的问题是:我应该为这个字段创建一个索引吗?如果是,我应该使用哪个索引?
【问题讨论】:
你的意思是like this? 值得注意的是,Postgres 在ARRAY,
、HSTORE
和JSON
列上做了出色的工作。 mysql 没那么多。
@tadman 我认为这不适用
我认为没有办法在 MySQL 中对此进行索引。你最好规范化架构。
@tadman:同意 Barmar,该技术适用于 JSON 对象,不适用于数组。
【参考方案1】:
如果您运行的是最新版本的 MySQL(8.0.17 或更高版本),则可以使用专门为此目的设计的 Multi-valued index:
多值索引是在存储值数组的列上定义的二级索引。
[...]
多值索引用于索引
JSON
数组。[...]
当
WHERE
子句中指定以下函数时,优化器使用多值索引来获取记录:MEMBER OF()
、JSON_CONTAINS()
、JSON_OVERLAPS()
。
假设您的 json 数组存储在表 myjs
的列 mytable
中,您可以像这样创建索引:
CREATE INDEX myidx
ON mytable ( (CAST(myjs AS UNSIGNED ARRAY)) );
【讨论】:
以上是关于MySQL如何索引JSON数组?的主要内容,如果未能解决你的问题,请参考以下文章