微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MYSQL 从 json 字段中搜索数据,其中数据位置可能不同

如何解决MYSQL 从 json 字段中搜索数据,其中数据位置可能不同

我有一张表,当我只知道例如可以在 IDENTIFIERS 列的不同位置找到的 dcid:xxxxxx 时,我必须在其中找到 ID

+----ID----+--------------------------------IDENTIFIERS-----------------------------------+
|  234512  | ["ident:2392392","id2:292930","dcid:291013"]                               |
|  564344  | ["ident:9402933","dcid:29101","id3:2092819"]                               |
|  655656  | {"1":"ident:0291911","2":"id2:9522211","3":"id3:8877543","4":"dcid:92366"}|
+----------+------------------------------------------------------------------------------+

解决方法

你可以这样做:

SELECT ID FROM mytable
WHERE JSON_SEARCH(identifiers,'dcid:291013');

JSON_SEARCH() function 返回值的 JSON 路径(如果它可以找到),无论 JSON 文档的位置或类型如何。如果在任何地方都找不到该值,则 JSON_SEARCH() 返回 NULL。

此查询无法使用索引进行优化。它必然会进行全表扫描,因此随着表的增长,它会变得越来越慢。

我的标准建议是,如果您需要使用 JSON 函数来搜索 WHERE 子句中的数据,那么您应该将数据存储在普通的行和列中,而不是 JSON。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。