mysql json字段添加多值索引后查询结果数量不对?

说明

  • mysql: 8.0.28
  • 数据表l2_set字段为存储id的json数组,如 [1,2,3]

问题

  1. 添加多值索引后查询结果不对
  2. json字段存储json数组时,json_overlaps 使用 columncolumn->'$'有什么区别?

关于问题2,查询结果是没有区别的,但是创建的多值索引不能互相命中

# 未添加多值索引:
# 3348 rows
select * from `orders` where json_overlaps(`l2_set`->'$', CAST('[34]' AS JSON)) and current_year='2023';

# 添加索引
alter table `orders` ADD INDEX l2_set_mmi((CAST(`l2_set`->'$' AS UNSIGNED ARRAY)));

# 查询
# 104 rows
select * from `orders` where json_overlaps(`l2_set`->'$', CAST('[34]' AS JSON)) and current_year='2023';
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1
yangweijie

如果只是单字段 1,2,3 这种 为什么不用find_in_set 直接搜 存的逗号分隔字符数据 postsql 好像没有find_in_set函数

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!