MySQL如何索引JSON数组?

问题描述

我有一个带有一维数组的JSON字段。实际上,在此字段中,我列出了一些ID,例如:

[347470,162063,17315,346852,174776,295865,7833,136813]

查询中,我会像这样引用此字段:

... AND JSON_CONTAINS(`users_actions`,174776)=0 

我的问题是:我应该为此字段创建一个索引,如果是的话-应该使用哪个索引?

解决方法

如果您运行的是最新版本的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)) );