mysql json字段

json字段取消双引号

extra_fields->>'$.buyer_nationality'
json_unquote(json_extract(content,'$.name'))

带双引号

extra_fields->'$.buyer_nationality'

建立虚拟字段 并建立索引

做了100万行json数据,测试结果

sql

SELECT * FROM cmf_third_party_user WHERE more->>"$.phone" = '13051450977'

text类型

使用text类型存储json字符串,速度较慢
4.5s

json类型

把more改为json类型,由于mysql内部的优化,速度有了较大提升
1.6s(没有虚拟字段,大概1.2s)

独立字段

如果有一个普通的字段,没有索引,少了json那些操作速度比较快

SELECT * FROM cmf_third_party_user WHERE openid = '13051450977'

1.6s(在没有虚拟字段时候 我记得是0.9s)

虚拟字段

虚拟字段也不是真实存在的数据,查询结果和json类型差不多

ALTER TABLE cmf_third_party_user ADD COLUMN phone varchar(20) GENERATED ALWAYS AS (more ->> '$.phone')

1.6s

虚拟字段+索引

这个虚拟字段可能需要额外的操作,实际上整体查询速度有所下降,但是可以加索引,结果和普通字段加索引一样,速度很快
0.0s

此处评论已关闭