mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis

背景:现有业务扩展字段,都存在feature字段,存在语义不清晰以及,难以利用索引查询问题

Mysql 5.7后推出利器,JSON+虚拟列,即实现了业务语义统一,也支持索引查询加速

一、简单描述

MySQL 5.7.7 labs版本开始InnoDB存储引擎已经原生支持JSON格式,该格式不是简单的BLOB类似的替换。原生的JSON格式支持有以下的优势:

JSON数据有效性检查:BLOB类型无法在数据库层做这样的约束性检查

查询性能的提升:查询不需要遍历所有字符串才能找到数据

支持索引:通过虚拟列的功能可以对JSON中的部分数据进行索引

二、MYSQL JSON 函数支持

三、MYBATIS 动态支持扩展+JSON查询

Mybatis查询

open="" separator="AND" close="">

and JSON_UNQUOTE(extended_fields->'$.${key}')= #{item}

]]>

MAP参数传入

a1cd2cea7fc3ee8b072b06abda653376.png

DB 数据存储,格式JSON

e547d1dbc8e67b8fdaeade89d69f860c.png

四、虚拟列

除了mysql5.7对json特性支持以外,另一个让人振奋人心的莫过于新增了虚拟列的这样一个东西。顾名思义,virtual column就是一个虚拟列,在MySQL 5.7中,支持两种generated column,即virtual generated column和stored generated column,前者只将generated column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将generated column持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与virtual column相比并没有优势,因此,MySQL 5.7中,不指定generated column的类型,默认是virtual column。此外

stored generated column性能较差

如果需要stored generated column的话,可能在generated column上建立索引更加合适 知道了什么是虚拟列,那么虚拟索引列当然是虚拟列加上索引喽!当然了,虚拟索引列也是通过传统的B+树索引即可实现对JSON格式部分属性的快速查询。使用方法是首先创建该虚拟列,然后在该虚拟列上创建索引:

ALTER TABLE ding_ding ADD virtualAppId int GENERATED ALWAYS AS (json_extract(instValue,'$.appId')) VIRTUAL;

ALTER TABLE ding_ding ADD index index_virtual_appId (virtualAppId);

下面看一下官方文档对virtual和stored解释:

VIRTUAL : Column values are not stored, but are evaluated when rows are read, immediately after any BEFORE triggers. 列值不存储,而是被读取行时进行评估,之后立即用 BEFORE触发器。虚拟列不带存储。

STORED : Column values are evaluated and stored when rows are inserted or updated. 列值进行评估,并行被插入或更新时存储。存放的列确实需要的存储空间,并可以被索引。 > 友情提示: > - 在MySQL 5.7.8之前,虚拟列不能建立索引。在MySQL 5.7.8,InnoDB的支持在虚拟列辅助索引 > - json类型字段不支持直接索引 > - 虚拟索引列只支持二级索引,其它的索引类型不支持 > - 虚拟索引列不能被当做一个外键来使用 > - 添加或在虚拟列删除一个辅助索引是就地操作。 Adding or dropping a secondary index on a virtual column is an in-place operation.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core安全事项(中)

上传文件上传文件是造成风险的很大因素,所以对上传文件进行处理是重要的,首先要处理的是:a、上传文件大小限制;b、上传文件类型(能过扩展或,或文件头)限制;c、上传的名称要替换掉;d、上传的文件…

TCL:花开刹那还是浴火重生

TCL:花开刹那还是浴火重生 [url]http://www.sina.com.cn[/url] 2008年04月07日 15:24 民营经济报本报记者 叶键 TCL3月份公布了2007年财报,公司净利润达3.9亿元,并于3月27日“摘星脱帽”,恢复为“TCL集团”的自由身,…

http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析

上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提醒大家渗透测试网站必须要拿到授权才能测试哦!3.…

如何手动连上mysql_如何手动安装MySql

想安装当然要先有一个MySql的安装包 这里使用的是mysql-5.7.12-winx64安装包百度云:http://pan.baidu.com/s/1kVAuXuv       密码:hr391.要将压缩包解压到你的指定位置(最好将要用的工具文件分类放好)例如:D:javaAppmysql-5.7.12-winx6…

WebRTC成为W3C和IETF正式标准

喜欢就关注我们吧!2021年1月26日,W3C(万维网联盟)和 IETF (互联网工程任务组)同时宣布 WebRTC(Web Real-Time Communications,Web 实时通信)现发布为正式标准&#xff0c…

weblogic搭建

weblogic的安装过程:首先下载server910_linux32.bin文件,你可以有多种打开方式,可以通过命令行,但我更偏重于双击打开,然后一路next,当然过程中的一些许可要求你的接受,好了 weblogic的第一步安装完成。接着创建weblog…

ironpython3发布时间_.NET 基金会项目介绍-DLR/IronPython2/IronPython3

DLR/IronPython2/IronPython3 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。 中文介绍中文介绍内容翻译自英文介绍,主要采用意译、如与原文存在出入,请以原文为准。 DLR/IronPython2/IronPython3 DLR 是基于 .NET Framewor…

mysql非安装_mysql 非安装版的配置

一直以来都是使用wamp中集成的mysql数据库,今天突然想试试下载一个mysql的zip包进行配置。一、下载mysql非安装版下载地址可以到:http://dev.mysql.com/downloads/mysql/ ,或者直接点击下载mysql-32bit:http://cdn.mysql.com/Down…

Xamarin.Forms: 无限滚动的ListView(懒加载方式)

说明 在本博客中,学习如何在Xamarin.Forms应用程序中设计一个可扩展的无限滚动的ListView。这个无限滚动函数在默认的Xamarin.Forms不存在,因此我们需要为此添加插件。在这里我们需要知道无限滚动时如何工作的。首先,显示固定的数据。一旦用户…

Lucifer的一场暴强围英雄表演

http://w3g.replays.net/doc/cn/2008-4-9/12077828953425064279.html围所欲围

javaweb应用开发与实践pdf_基于阿里云打造「云原生」Web应用——「懒猪行」Web应用开发实践...

作者:阿里云MVP 刘远程背景『懒猪行』专注于境外自由行S2B业务,涉及分销、终端用户服务、供应链等多个服务环节,随着业务规模的不端增加,我们一直在探索Web应用开发的最佳实践,以加快Web应用的迭代效率,为B…

python大型项目中的日志模块_Python中日志模块的使用

前言程序和脚本往往是无人值守运行的,一旦发生问题,就需要我们去追溯当时的情况来定位问题的原因。这便需要我们在程序和脚本中引入日志的功能。相比于print信息,使用logging日志有以下优点可以记录输出日志的时间、文件、函数以及代码行&…

OSI强调:SSPL并不是开源许可证

喜欢就关注我们吧!日前,开放源代码促进会 OSI(Open Source Initiative)强调,SSPL 并不是一个开源许可证。OSI 表示,SSPL(Server Side Public License) 是一种典型的 “fauxpen”&…

.NET Remoting

轉自:http://www.iiiedu.org.tw/knowledge/knowledge20030430_2.htm.NET Remoting 資策會數位教育研究所講師 董淑惠     概念簡介 微軟以往使用COM/DCOM的技術來處理分散式系統架構,透過Client端的Proxy代理程式來呼叫遠端Server機器上的物件。.NET Framework則…

jdbc连接mysql8的一些坑_mysql8.0 jdbc连接注意事项

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼url增加参数useSSL 和时区 : jdbc:mysql://localhost:3306/mydb?useSSLfalse&serverTimezoneUTCdriver变化: com.mysql.jdbc.Driver > com.mysql.cj.jdbc.Driver常见错误提示1:如果driver没有添加cj&#xff0c…

通过python实现linux切换用户_Python操作远程服务器切换到root用户

在自动化运维过程中,需要远程服务器切换到root用户下执行命令,尝试了一些方法,得到如下好用的方法,供大家使用: import time import paramiko def verification_ssh(host,username,password,port,root_pwd,cmd): spara…

RabbitMQ 入门:1. Message Broker(消息代理)

Message Broker(消息代理)维基百科对 Message Broker 的定义是:Message broker是一种中介程序模块,它把消息从发送方的正式消息传递协议转化为接收方的正式消息传递协议。这个定义略繁琐,下面看看 RabbitMQ 官网对 Mes…

ASP.NET中常用输出JS脚本的类(改进版)

在ASP.NET中我们经常需要输出一些JS脚本,比如弹出一个警告窗口,返回到历史页面等JS功能,我看到网上流传得比较广的是马先光写的一个JScript类,这个类基本将经常用到的JS脚本包含了,非常方便,唯一的不足是作…

mysql从库夯住_MySQL从库维护经验分享

前言:MySQL 主从架构应该是最常用的一组架构了。从库会实时同步主库传输来的数据,一般从库可以作为备用节点或作查询使用。其实不只是主库需要多关注,从库有时候也要经常维护,本篇文章将会分享几点从库维护经验,一起来…

python frame用法_python—dataframe用法

#行处理 #df.iloc[1] 行索引号——获取行 #df.iloc[0,1] 行列索引号——获取一个元素 #df.iloc[[0,1]] 双括号默认都是行索引号——获取n行 #df.iloc[0:2,1:3] 行列索引号——获取区域元素 #df.loc["A"] 行名称——获取行 #df.loc["A","c1"] 行列…