簡單談談MySQL5 7 JSON格式檢索

2021-08-21 13:14:16 字數 1529 閱讀 6506

mysql 5.7.7 labs版本開始innodb儲存引擎已經原生支援json格式,該格式不是簡單的blob類似的替換。下面我們來詳細**下吧

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( '' );

insert into json_test(content) value( '' );

insert into json_test(content) value( '' );

第三步:查詢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列比較,還是會走全表掃瞄 )

總結:其實mysql通過一種空間換時間的做法,類似建立乙個觸發器,把json列上的資料冗餘儲存到虛擬列上,比較的時候通過走虛擬列的索引,再定位到實際資料。

MySQL 5 7 JSON相關操作

親身試驗過 官網ip create table demo id int unsigned primary key auto increment,comment json insert into demo id,name values 1,檢查第一層的key值 json keys select jso...

MySQL5 7 JSON型別使用詳解

json是一種輕量級的資料交換格式,採用了獨立於語言的文字格式,類似xml,但是比xml簡單,易讀並且易編寫。對機器來說易於解析和生成,並且會減少網路頻寬的傳輸。json的格式非常簡單 名稱 鍵值。之前mysql版本裡面要實現這樣的儲存,要麼用varchar要麼用text大文字。mysql5.7發布...

mysql5 7 新增的json欄位型別

一 我們先建立乙個表,準備點資料 create table json test id int 11 unsigned not null auto increment comment id json json default null comment json資料 二 檢索json列的字段 通過使用 ...