优点:
1、最直接的好处是不用为数据中的每个key值新建一个字段,可以任意的增减字段而无需修改数据表结构,甚至可以减少数据表的设计。
2、可以减少数据表的查询,减少关联查询,一个查询的结果就可以代替几个查询的结果,降低数据库服务器的压力。
缺点:
1、json数据仅仅只能用于展示,如果用于条件查询,数据更新其效率是很低的,而且难于优化,不要尝试在json字段上进行查询优化。
2、虽然mysql5.7支持了json类型,
Mysql存放JSON格式的论坛(学习思路):
Storing JSON in database vs. having a new column for each key
但mysql作为关系型数据库,对标准化的column-per-value支持更好,包括数据类型限制、长度限制,唯一索引限制,查询索引优化,外键关联,关联查询支持,运算支持等,这些都是json中key无法达到的。
3、将常用的查询字段从json数据中剥离出来形成单独的字段,虽然可以改善查询问题,但如果后期进行剥离就会涉及代码修改和数据迁移,遇到多版本的话,还可能出现数据冗余的问题,处理不好还会出现数据不一致问题,并不仅仅这么简单,一定慎用。
4、存储json的text类型性能并不乐观。
5、大JSON的解析性能同样不乐观,而且对于中文数据,纯JSON太占空间了 。
总结:
1、不建议在关系型数据库中使用json格式,如果因为字段不确定,任意性强,可以用非关系型数据库如MongoDB/Redis。
2、如果使用json格式保存数据,请确保数据仅仅用作展示,如果涉及条件查询、更新等操作请不要使用json。
3、经常使用的字段建议也不要存放在json中,即使不被用作查询条件,因为应用程序每次解析仍然是一个耗时的操作。