问题描述
我有一个带有一维数组的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)) );