MySQL 8.0.26中为JSON数组列的leagueId字段创建索引可行吗?
针对JSON数组中的leagueId字段创建索引的可行性(MySQL 8.0.26)
可行,但无法直接对JSON数组内的leagueId字段创建普通索引,需借助MySQL 8.0.14及以上版本支持的**多值索引(Multi-Valued Index)**实现,你的8.0.26版本满足要求。
具体实现步骤
- 创建多值索引
假设你的表名为your_table,存储JSON数组的列名为json_data,执行以下SQL创建索引:
ALTER TABLE your_table ADD INDEX idx_league_ids ((CAST(json_data->>'$[*].leagueId' AS UNSIGNED ARRAY)));
json_data->>'$[*].leagueId':提取JSON数组中所有元素的leagueId值,返回一个JSON数组CAST(...) AS UNSIGNED ARRAY:将提取出的JSON数组转换为无符号整数数组类型,用于创建多值索引
- 使用索引查询
创建索引后,以下两种常见查询都会触发索引优化:
- 检查特定
leagueId是否存在于数组中:
SELECT * FROM your_table WHERE 1078 MEMBER OF(json_data->>'$[*].leagueId');
- 使用
JSON_CONTAINS查询包含指定leagueId的记录:
SELECT * FROM your_table WHERE JSON_CONTAINS(json_data, '{"leagueId": 1078}', '$');
补充说明
如果你的查询场景更复杂,也可以考虑用JSON_TABLE将JSON数组展开为行,再配合普通索引,但多值索引是针对JSON数组场景更直接高效的方案。
内容的提问来源于stack exchange,提问作者JustinCredible
相关产品推荐
相关产品推荐

