MySQL JSON 字段到底是如何运作的?
在 MySQL 中,JSON 字段的工作原理与预期有较大出入。
存储方式:二进制字符串
JSON 字段本质上是二进制字符串,而非文本字符串。这与 MySQL 中的 "BLOB" 类型类似,无需反序列化即可直接存储。
查询效率:部分反序列化
查询时,MySQL 仅反序列化所需的字段,而不是整个 JSON 字符串。这得益于类似 JsonPath 的语法和按键排序的存储方式,从而大大提高了查询效率。
融合与 B+ 树
JSON 字段并未与 B+ 树中的数据相融合。相反,它们作为独立的单元存储在树中。解析时,MySQL 使用索引查找相应的密钥,随后从二进制字符串中提取所需值。
MongoDB 的 BSON
与 MySQL 不同,MongoDB 使用 BSON(二进制 JSON)而非 JSON。BSON 兼容 JSON,但格式不同,并以 K/V 方式存储在 WiredTiger 引擎中。
合理使用场景
正如一位社区成员所建议的,MySQL 的 JSON 字段对于解决新列添加问题时非常有用。它可以避免锁定表和停服,但前提是新列不涉及索引,并且仅在查询后用于显示数据。