国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 12:52:59
字體:
來源:轉載
供稿:網友

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( '{"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類列的數據

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列比較,還是會走全表掃描 )

explain  select json_extract(content,  '$.name' )  from json_test  where name_virtual= "zhangsan" /G

總結:

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

您可能感興趣的文章:

用Python將mysql數據導出成json的方法Python3實現將本地JSON大數據文件寫入MySQL數據庫的方法PHP連接MySQL數據庫并以json格式輸出MySQL操作之JSON數據類型操作詳解MySQL5.7 JSON類型使用詳解利用java+mysql遞歸實現拼接樹形JSON列表的方法示例Mysql5.7中JSON操作函數使用說明mysql5.6及以下版本如何查詢數據庫里的json詳解Mysql中的JSON系列操作函數android+json+php+mysql實現用戶反饋功能方法解析MySQL插入json問題
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 资源县| 江华| 彭山县| 河南省| 鹿泉市| 云南省| 左贡县| 财经| 延吉市| 翼城县| 利辛县| 罗源县| 大新县| 宣城市| 宜城市| 石柱| 丹寨县| 西昌市| 罗甸县| 黑河市| 清涧县| 友谊县| 原阳县| 历史| 盐池县| 桓仁| 阿克| 潢川县| 阆中市| 隆昌县| 云浮市| 永州市| 云安县| 集安市| 霸州市| 普安县| 云林县| 永靖县| 安西县| 绥德县| 平果县|