作者:杨涛涛
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。大家都知道,MySQL 从 5.7 开始,增加了新的数据类型:JSON。
JSON 类型的出现,弥补了 MySQL 长期以来相比其他关系型数据库的非标准化特性略势,比如可以用 JSON 来实现类似字典、数组等类型。以及之后大量针对 JSON 类型字串的相关遍历方法与函数。
比如对数组来说,简单的遍历路径为 "$[数组小标]" 或者 "$[*]" 来一次性遍历所有元素。MySQL 8.0 又新增了对于数组元素的范围遍历,比如 "$[m to n]",表示遍历下标为 m 到 n 的元素。
举个例子,以下 JSON 字串(随便找张表 explain format=json 的结果):
# javascript
set @json_str1 = '{
"query_block": {
"table": {
"filtered": "100.00",
"cost_info": {
"eval_cost": "898504.10",
"read_cost": "17457.25",
"prefix_cost": "915961.35",
"data_read_per_join": "137M"
},
"table_name": "t1",
"access_type": "ALL",
"used_columns": [
"id",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
"r8"
],
"rows_examined_per_scan": 8985041,
"rows_produced_per_join": 8985041
},
"cost_info": {
"query_cost": "915961.35"
},
"sel