首页/数据/SQL 速查/JSON 多值索引(8.0.17+)
性能与执行计划72 条

JSON 多值索引(8.0.17+)

为 JSON 数组的每个元素建立索引条目:让 MEMBER OF、JSON_CONTAINS 等条件可以走索引。

SQL 速查数据更新于 2026-10-12

示例

示例
ALTER TABLE products
  ADD INDEX idx_tags ((CAST(tags -> '$.tags' AS CHAR(20) ARRAY)));

-- 可命中多值索引的写法
SELECT * FROM products
WHERE JSON_CONTAINS(tags -> '$.tags', '"book"');

SELECT * FROM products
WHERE 'book' MEMBER OF (tags -> '$.tags');

-- 检查是否命中
EXPLAIN SELECT * FROM products WHERE 'book' MEMBER OF (tags -> '$.tags');
元素类型CAST 的目标类型要覆盖元素值域(CHAR/UNSIGNED/SIGNED/DATE 等 ARRAY)
匹配条件MEMBER OF、JSON_CONTAINS、JSON_OVERLAPS 等可与多值索引配合
版本MySQL 8.0.17 起支持

易错点

  • CAST 类型与数据不匹配:元素超长或类型不符时可能截断或匹配异常,建索引前先核对数据
  • 改写后不验证命中:只有特定函数能利用多值索引,用 EXPLAIN 确认

数据来源与参考

  • MySQL 8.0 Reference Manual · Multi-Valued Indexes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌