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数组。[...]
当在子句中指定以下函数时,优化器将使用多值索引来获取记录
WHERE:MEMBER OF(),JSON_CONTAINS(),JSON_OVERLAPS()。
假设您的 json 数组存储在myjstable 的列中mytable,您可以像这样创建索引:
CREATE INDEX myidx
ON mytable ( (CAST(myjs AS UNSIGNED ARRAY)) );
Run Code Online (Sandbox Code Playgroud)