You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL覆盖索引疑似Bug:特定条件下查询无返回结果问题咨询

MySQL 空JSON数组导致函数表达式索引失效问题

环境复现

表结构与测试数据

CREATE TABLE project_sheets
(
    id            INT AUTO_INCREMENT PRIMARY KEY,
    project_id    INT NULL,
    path          JSON NULL,
    INDEX project_sheets_path_index(project_id, (CAST(path->'$' AS CHAR(255) ARRAY)))
) COLLATE = utf8mb4_unicode_ci;

INSERT INTO test.project_sheets (project_id, path) VALUES (40, '[]');

异常查询(无结果返回)

使用默认索引执行查询时,无法匹配到数据:

SELECT * FROM test.project_sheets WHERE project_id = 40;

正常查询(返回1条结果)

忽略该函数表达式索引后,查询正常返回预期记录:

SELECT * FROM test.project_sheets IGNORE INDEX (project_sheets_path_index) WHERE project_id = 40;

特殊情况

若向path字段的JSON数组中添加元素(例如'[1,2]'),无论是否使用该索引,查询均能正常返回结果。

问题本质

这是MySQL优化器在处理包含空JSON数组的函数表达式复合索引时的逻辑缺陷:优化器在构建索引条目时,对空JSON数组的CAST处理存在异常,导致查询时无法通过索引匹配到对应记录;而跳过该索引后,查询走全表扫描或主键索引,即可正确识别空JSON数组的记录。

内容的提问来源于stack exchange,提问作者AlexProh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:33:19