簡(jiǎn)單談?wù)凪ySQL5.7 JSON格式檢索
MySQL5.7版本開(kāi)始支持JSON格式,在創(chuàng)建表時(shí),可以指定列表的數(shù)據(jù)類型為JSON,但是如何在JSON格式上創(chuàng)建索引呢??
本人做了一個(gè)簡(jiǎn)單測(cè)試。
第一步:建立一個(gè)包含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" ;
通過(guò)expain分析改查詢語(yǔ)句,發(fā)現(xiàn)其走全表掃描
在網(wǎng)上查詢資料,得知如果要在JSON列上進(jìn)行檢索,需要對(duì)檢索的key創(chuàng)建虛擬列,然后再虛擬列上創(chuàng)建索引
第四步:在content列上,對(duì)"name"建立虛擬列
ALTER TABLE json_test ADD name_virtual varchar (32) GENERATED ALWAYS AS (json_extract(content, '$.name' )) VIRTUAL;
第五步:對(duì)虛擬列創(chuàng)建索引
CREATE INDEX name_virtual_index ON json_test(name_virtual);
再次做查詢( 注,where條件需要使用虛擬列來(lái)進(jìn)行檢索,如果直接用JSON列比較,還是會(huì)走全表掃描 )
explain select json_extract(content, '$.name' ) from json_test where name_virtual= "zhangsan" \G
總結(jié):
其實(shí)MySQL通過(guò)一種空間換時(shí)間的做法,類似創(chuàng)建一個(gè)觸發(fā)器,把JSON列上的數(shù)據(jù)冗余存儲(chǔ)到虛擬列上,比較的時(shí)候通過(guò)走虛擬列的索引,再定位到實(shí)際數(shù)據(jù)。
- 詳解Mysql中的JSON系列操作函數(shù)
- MySQL操作之JSON數(shù)據(jù)類型操作詳解
- mysql全面解析json/數(shù)組
- Mysql怎么存儲(chǔ)json格式數(shù)據(jù)詳解
- PHP連接MySQL數(shù)據(jù)庫(kù)并以json格式輸出
- MySQL5.7 JSON類型使用詳解
- Mysql如何對(duì)json數(shù)據(jù)進(jìn)行查詢及修改
- MybatisPlus如何處理Mysql的json類型
- Mysql5.7中JSON操作函數(shù)使用說(shuō)明
- mysql 如何使用JSON_EXTRACT() 取json值
- mysql的json處理實(shí)現(xiàn)
相關(guān)文章
淺談SQLite時(shí)間函數(shù)的使用說(shuō)明與總結(jié)分析
本篇文章是對(duì)SQLite時(shí)間函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05CentOS7下mysql 8.0.16 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CentOS7下mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05MySQL 數(shù)據(jù)查重、去重的實(shí)現(xiàn)語(yǔ)句
這篇文章主要介紹了MySQL 數(shù)據(jù)查重、去重的實(shí)現(xiàn)語(yǔ)句,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-09-09centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法詳解
這篇文章主要介紹了centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法,詳細(xì)分析了centos7環(huán)境下使用二進(jìn)制安裝包安裝 mysql5.6的具體步驟、相關(guān)命令、配置方法及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02