Mysql中使用json格式存储数据好吗?

在最近的一次项目开发过程中,在数据表设计阶段,对是否用json格式存储某些数据我们产生了分歧。以往项目中对此点比较随意,导致数据表中有些json格式数据体积很大,层次很深,我担心这会降低数据查询和解析的效率。于是我开始思考,mysql中是否应该使用json格式存储数据,如果是那应该什么时候使用。查阅了很多资料后总结如下:

优点:

1、最直接的好处是不用为数据中的每个key值新建一个字段,可以任意的增减字段而无需修改数据表结构,甚至可以减少数据表的设计。

2、可以减少数据表的查询,减少关联查询,一个查询的结果就可以代替几个查询的结果,降低数据库服务器的压力。

同时缺点也是明显的:

1、json数据仅仅只能用于展示display,如果用于条件查询,数据更新其效率是很低的,而且难于优化,不要尝试在json字段上进行查询优化。

2、虽然mysql5.7支持了json类型,但mysql作为关系型数据库,对标准化的column-per-value支持更好,包括数据类型限制、长度限制,唯一索引限制,查询索引优化,外键关联,关联查询支持,运算支持等,这些都是json中key无法达到的。

3、将常用的查询字段从json数据中剥离出来形成单独的字段,虽然可以改善查询问题,但你最好有先见之明,如果后期进行剥离就会涉及代码修改和数据迁移,遇到多版本的话,还可能出现数据冗余的问题,处理不好还会出现数据不一致问题,并不仅仅这么简单,一定慎用。

4、存储json的text类型性能并不乐观。

5、大JSON的解析性能同样不乐观,而且对于中文数据,纯JSON太占空间了

 

总结:

1、不建议在关系型数据库中使用json格式,如果因为字段不确定,任意性强,何不试试非关系型数据库如MongoDB/Redis。

2、如果使用json格式保存数据,请确保数据仅仅用作展示,如果涉及条件查询、更新等操作请不要使用json。

3、经常使用的字段建议也不要存放在json中,即使不被用作查询条件,因为应用程序每次解析仍然是一个耗时的操作。

 

查阅资料:

Storing JSON in database vs. having a new column for each key

发布了3 篇原创文章 · 获赞 2 · 访问量 2186

猜你喜欢

转载自blog.csdn.net/zhongzhen7355/article/details/100092893
今日推荐