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列的字段 通過使用 ...