最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單談談MySQL5.7 JSON格式檢索

 更新時間:2017年01月01日 14:29:25   作者:yangfei001  
MySQL 5.7.7 labs版本開始InnoDB存儲引擎已經(jīng)原生支持JSON格式,該格式不是簡單的BLOB類似的替換。下面我們來詳細探討下吧

MySQL5.7版本開始支持JSON格式,在創(chuàng)建表時,可以指定列表的數(shù)據(jù)類型為JSON,但是如何在JSON格式上創(chuàng)建索引呢??

本人做了一個簡單測試。

第一步:建立一個包含JSON類型的表:

CREATE TABLE json_test` (
 id` int (8) NOT NULL AUTO_INCREMENT,
 content` json NOT NULL ,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二步:初始化數(shù)據(jù)

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類列的數(shù)據(jù)

select json_extract(content,  '$.name' )  from json_test  where json_extract(content,  '$.name' )= "zhangsan" ;

通過expain分析改查詢語句,發(fā)現(xiàn)其走全表掃描

在網(wǎng)上查詢資料,得知如果要在JSON列上進行檢索,需要對檢索的key創(chuàng)建虛擬列,然后再虛擬列上創(chuàng)建索引

第四步:在content列上,對"name"建立虛擬列

ALTER TABLE json_test  ADD name_virtual  varchar (32) GENERATED ALWAYS  AS (json_extract(content,  '$.name' )) VIRTUAL;

第五步:對虛擬列創(chuàng)建索引

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

總結(jié):

其實MySQL通過一種空間換時間的做法,類似創(chuàng)建一個觸發(fā)器,把JSON列上的數(shù)據(jù)冗余存儲到虛擬列上,比較的時候通過走虛擬列的索引,再定位到實際數(shù)據(jù)。

相關(guān)文章

最新評論

吉首市| 鹤山市| 平顶山市| 禄丰县| 延川县| 罗源县| 白河县| 桦川县| 沙洋县| 泌阳县| 岫岩| 会理县| 徐水县| 九龙城区| 泗洪县| 涞水县| 衡水市| 夏河县| 浦县| 肃南| 余姚市| 灵武市| 海丰县| 克拉玛依市| 平原县| 中超| 韶山市| 丹寨县| 施秉县| 清丰县| 嘉义县| 弥渡县| 儋州市| 吉木萨尔县| 北碚区| 揭东县| 泽库县| 重庆市| 广东省| 时尚| 广宗县|