MySQL 如何索引 JSON 数组?

Red*_*ber 10 mysql sql indexing json query-optimization

我有一个带有一维数组的 JSON 字段。事实上,在这个字段中我有一些 ID 的列表,如下所示:

[347470, 162063, 17315, 346852, 174776, 295865, 7833, 136813]
Run Code Online (Sandbox Code Playgroud)

在我的查询中,我这样引用该字段:

... AND JSON_CONTAINS(`users_actions`, 174776)=0 
Run Code Online (Sandbox Code Playgroud)

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

GMB*_*GMB 17

如果您运行的是最新版本的 MySQL(8.0.17 或更高版本),您可以使用多值索引,它正是为此目的而设计的:

多值索引是在存储值数组的列上定义的辅助索引。

[...]

多值索引用于索引JSON数组。

[...]

当在子句中指定以下函数时,优化器将使用多值索引来获取记录WHEREMEMBER OF(), JSON_CONTAINS(), JSON_OVERLAPS()

假设您的 json 数组存储在myjstable 的列中mytable,您可以像这样创建索引:

CREATE INDEX myidx 
ON mytable ( (CAST(myjs AS UNSIGNED ARRAY)) );
Run Code Online (Sandbox Code Playgroud)