《Mysql入門簡單談?wù)凪ySQL5.7 JSON格式檢索》要點(diǎn):
本文介紹了Mysql入門簡單談?wù)凪ySQL5.7 JSON格式檢索,希望對您有用。如果有疑問,可以聯(lián)系我們。
MYSQL入門MySQL5.7版本開始支持JSON格式,在創(chuàng)建表時(shí),可以指定列表的數(shù)據(jù)類型為JSON,但是如安在JSON格式上創(chuàng)建索引呢??
MYSQL入門本人做了一個(gè)簡單測試.
MYSQL入門第一步:建立一個(gè)包括JSON類型的表:
MYSQL入門
CREATE TABLE json_test` (
id` int (8) NOT NULL AUTO_INCREMENT,
content` json NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MYSQL入門第二步:初始化數(shù)據(jù)
MYSQL入門
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}' );
MYSQL入門第三步:查詢JSON類列的數(shù)據(jù)
MYSQL入門select json_extract(content,? '$.name' )? from json_test? where json_extract(content,? '$.name' )= "zhangsan" ;
MYSQL入門通過expain分析改查詢語句,發(fā)現(xiàn)其走全表掃描
MYSQL入門
MYSQL入門在網(wǎng)上查詢資料,得知如果要在JSON列上進(jìn)行檢索,需要對檢索的key創(chuàng)建虛擬列,然后再虛擬列上創(chuàng)建索引
MYSQL入門第四步:在content列上,對"name"建立虛擬列
MYSQL入門ALTER TABLE json_test? ADD name_virtual? varchar (32) GENERATED ALWAYS? AS (json_extract(content,? '$.name' )) VIRTUAL;
MYSQL入門第五步:對虛擬列創(chuàng)建索引
MYSQL入門CREATE INDEX name_virtual_index? ON json_test(name_virtual);
MYSQL入門再次做查詢( 注,where條件需要使用虛擬列來進(jìn)行檢索,如果直接用JSON列比擬,還是會(huì)走全表掃描 )
MYSQL入門explain? select json_extract(content,? '$.name' )? from json_test? where name_virtual= "zhangsan" \G
MYSQL入門
MYSQL入門總結(jié):
MYSQL入門其實(shí)MySQL通過一種空間換時(shí)間的做法,類似創(chuàng)建一個(gè)觸發(fā)器,把JSON列上的數(shù)據(jù)冗余存儲(chǔ)到虛擬列上,比擬的時(shí)候通過走虛擬列的索引,再定位到實(shí)際數(shù)據(jù).
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Mysql入門簡單談?wù)凪ySQL5.7 JSON格式檢索》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/13074.html