MySQL5.7版本开始支持JSON格式,在创建表时,可以指定列表的数据类型为JSON,但是如何在JSON格式上创建索引呢??
本人做了一个简单测试。
第一步:建立一个包含JSON类型的表:
CREATE TABLE json_test` ( id` int (8) NOT NULL AUTO_INCREMENT, content` json NOT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二步:初始化数据
insert into json_test(content) value( '{"name":"zhangsan","age":18}' ); insert into json_test(content) value( '{"name":"lisi","age":19}' ); insert into json_test(content) value( '{"name":"wangwu","age":20}' );
第三步:查询JSON类列的数据
select json_extract(content, '$.name' ) from json_test where json_extract(content, '$.name' )= "zhangsan" ;
通过expain分析改查询语句,发现其走全表扫描
在网上查询资料,得知如果要在JSON列上进行检索,需要对检索的key创建虚拟列,然后再虚拟列上创建索引
第四步:在content列上,对"name"建立虚拟列
ALTER TABLE json_test ADD name_virtual varchar (32) GENERATED ALWAYS AS (json_extract(content, '$.name' )) VIRTUAL;
第五步:对虚拟列创建索引
CREATE INDEX name_virtual_index ON json_test(name_virtual);
再次做查询( 注,where条件需要使用虚拟列来进行检索,如果直接用JSON列比较,还是会走全表扫描 )
explain select json_extract(content, '$.name' ) from json_test where name_virtual= "zhangsan" \G
总结:
其实MySQL通过一种空间换时间的做法,类似创建一个触发器,把JSON列上的数据冗余存储到虚拟列上,比较的时候通过走虚拟列的索引,再定位到实际数据。
本文向大家介绍简单谈谈json跨域,包括了简单谈谈json跨域的使用技巧和注意事项,需要的朋友参考一下 这一篇文章呢,主要是之前一直听别人讲json跨域跨域,但是还是一头雾水,只知其一,于是一怒之下,翻阅各种资料,如果有不正确的地方,劳烦指正一下^_^ 首先,先了解浏览器有一个很重要安全性限制,即为同源策略:不同域的客户端脚本在无明确授权的情况下不能读些对方资源。跨域也就是不同源~ 简单的说,只要
本文向大家介绍简单谈谈apache与nginx,包括了简单谈谈apache与nginx的使用技巧和注意事项,需要的朋友参考一下 一、 关于Apache与Nginx的优势比较 不断有人跟我说Nginx比Apache好、比Apache快之类。Nginx更主要是作为反向代理,而非Web服务器使用。我翻译过一本关于反向代理的技术书籍,同时精通Apache API开发,对Nginx和Apache的工
本文向大家介绍简单谈谈python中的lambda表达式,包括了简单谈谈python中的lambda表达式的使用技巧和注意事项,需要的朋友参考一下 最近在coding时发现使用lambda还是有诸多优点的,很多时候代码更整洁,更pythonic,所以在此简单总结一下 1.lambda是什么 举个简单的例子: 两个func的定义是完全相同的,那两种函数定义方法配合map使用,将list中所有元素求平
本文向大家介绍简单谈谈gulp-changed插件,包括了简单谈谈gulp-changed插件的使用技巧和注意事项,需要的朋友参考一下 前言 gulp-changed插件的作用,是用来过滤未被修改过的文件,只有修改后的文件才能通过管道。这样做的好处时,只处理修改后的文件,减少后续程序的执行时间。 根据官方给出的例子: 检测SRC中的文件,然后把从changed()通过的文件输出到DEST文件夹中,
本文向大家介绍简单谈谈JS中的正则表达式,包括了简单谈谈JS中的正则表达式的使用技巧和注意事项,需要的朋友参考一下 1、正则表达式包括两部分 ①定义正则表达式的规则; ②正则表达式的模式(i/g/m); 2、声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式; eg:var reg = /white/g; ② 使用new关键字: var reg = new RegE
本文向大家介绍简单谈谈PHP中strlen 函数,包括了简单谈谈PHP中strlen 函数的使用技巧和注意事项,需要的朋友参考一下 strlen函数说明。 int strlen ( string $string ) 在这篇文章,我们可以知道strlen函数是通过Zend Engine定义的。函数的定义可以在这里查看。 在这里也给出函数的源码: 该文章讲到,该函数很简单,并不需要进一步的解释。而这篇