事务场景:
(1)因图书存在多种标签类型,如科幻,科技,天然等类似分类。假如采用数据库字段区分会形成表太大。到数据量到达千万级时,查询效果明显不可。
解决方案:
mysql5.7+以上版本提供了json数据类型,用来解决数据文本检索。
运用过程:
1.创建数据库字段为json类型
altertable‘表名’add’字段名’jsonnullcomment’测验json字段’;
2.刺进json格局数据
3.查询检查一下效果
explainselectjson->’$.字段’from’表名’wherejson->’$.字段’=’条件值’
4.实际场景中,一般咱们都不会进场3查询。一般采用虚拟列来表明json字段中的列,这样方便于查询。创建虚拟列如下。
altertable‘表名’
addcolumn’虚拟字段名’carchar(50)
generatedalawysas(json_unquote(json_extract(json,utf8mb4’$.json需求虚拟的字段’)))virtualnull;
json_unquote函数:去掉引号的功能将原json串的引号去掉转成string类型
json_extract函数:根据键查目标
5.当建好虚拟列之后就可以正常写SQL查询,假如修改了json字段数据中文本,呼应的虚拟字段会不时更新为最新的。
json数据库设计思路
使命的阶段信息直接存储为JSON格局,这种格局避免了表关联,避免建表,应用层处理也简略的多了。
1.JSON内容为信息性质,而不具备非统计功能;简略讲便是展示,不能用于深度处理;
2.JSON内容不应该是多表需要的;比如一些信息其实是被多表共享的,这就不可以了,因为存在一个更新批量的问题;JSON内容一旦修改/创立其实是要影响多个表,那么慎用JSON;
3.JSON内容应该是依靠性比较强,比如阶段信息永远都是依靠于使命而存在,假如有逻辑要独自针对“阶段”内容进行处理,或许在表的概念上有需要以“阶段表”做主表的情况下,JSON化慎用,最好是独自处理为一张表。
4.JSON中的字段作为检索条件的慎用,虽然MySql以及MongoDB都支持关于JSON的运用,但是假如数据库服务器还要对JSON进行解析再处理无疑在功率上是有问题的。