我有一个表candidate
:
id | name | info
|---|------|--------------------------------------------------------------
1 | apps | \[{"exp": "1","skill": "python"},{"exp": "2","skill": "c" }\]
2 | Ravi | \[{"exp": "1","skill": "python"},{"exp": "1","skill": "java" }\]
我需要使用索引查询和过滤skill =“python”和exp =“1”的候选人。
我试图在MySql 8.0.32中添加一个列并在表上添加一个索引:
ALTER TABLE candidate
ADD exp_skills_json JSON GENERATED ALWAYS AS (JSON_ARRAYAGG(JSON_OBJECT('skill', info-\>\>'$.skill', 'exp', info-\>\>'$.exp'))) VIRTUAL,ADD INDEX idx_exp_skills_json ((exp_skills_json));
但是,我得到了一个错误代码1111。
如何添加索引以使查询有效执行?
1条答案
按热度按时间0lvr5msh1#
在MySQL中,你不能在JSON对象数组上创建索引。
最接近的方法是在MySQL 8.0中,在相同类型标量的JSON数组上创建多值索引。但这不适用于您显示的示例,这是一个对象数组。
在您显示的示例中,JSON对象都具有相同的字段
exp
和skill
。您应该创建第二个表,其中列为exp
和skill
,并在每行存储一对。没有理由在您展示的示例中使用JSON,并且不可能使用索引对其进行优化。