国产探花免费观看_亚洲丰满少妇自慰呻吟_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問題
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 板桥市| 化州市| 西乌| 理塘县| 正蓝旗| 平谷区| 玉树县| 新田县| 玉溪市| 青龙| 西吉县| 昌邑市| 越西县| 天水市| 呼和浩特市| 亚东县| 阿图什市| 阿克陶县| 晋宁县| 永川市| 宜丰县| 青浦区| 镇安县| 德保县| 乐东| 尤溪县| 哈巴河县| 枣强县| 山西省| 土默特左旗| 岗巴县| 那坡县| 文化| 建德市| 浦东新区| 黄大仙区| 海阳市| 砚山县| 达拉特旗| 湘潭市| 博白县|