欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單談?wù)凪ySQL5.7 JSON格式檢索

 更新時(shí)間:2017年01月01日 14:29:25   作者:yangfei001  
MySQL 5.7.7 labs版本開(kāi)始InnoDB存儲(chǔ)引擎已經(jīng)原生支持JSON格式,該格式不是簡(jiǎn)單的BLOB類似的替換。下面我們來(lái)詳細(xì)探討下吧

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ù)。

相關(guān)文章

  • 淺談SQLite時(shí)間函數(shù)的使用說(shuō)明與總結(jié)分析

    淺談SQLite時(shí)間函數(shù)的使用說(shuō)明與總結(jié)分析

    本篇文章是對(duì)SQLite時(shí)間函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MySQL字符集亂碼及解決方案分享

    MySQL字符集亂碼及解決方案分享

    這篇文章主要給大家介紹了關(guān)于MySQL字符集亂碼及解決方案的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • CentOS7下mysql 8.0.16 安裝配置方法圖文教程

    CentOS7下mysql 8.0.16 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了CentOS7下mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • MySQL常見(jiàn)的腳本語(yǔ)句格式參考指南

    MySQL常見(jiàn)的腳本語(yǔ)句格式參考指南

    無(wú)論是運(yùn)維、開(kāi)發(fā)、測(cè)試,還是架構(gòu)師,數(shù)據(jù)庫(kù)技術(shù)是一個(gè)必備加薪神器,下面這篇文章主要給大家介紹了關(guān)于MySQL常見(jiàn)的腳本語(yǔ)句格式參考指南的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • MySQL外鍵創(chuàng)建失敗1005原因匯總

    MySQL外鍵創(chuàng)建失敗1005原因匯總

    MySQL外鍵創(chuàng)建失敗1005原因有很多,本文整理了一些,希望對(duì)大家有所幫助
    2014-01-01
  • MySQL 數(shù)據(jù)查重、去重的實(shí)現(xiàn)語(yǔ)句

    MySQL 數(shù)據(jù)查重、去重的實(shí)現(xiàn)語(yǔ)句

    這篇文章主要介紹了MySQL 數(shù)據(jù)查重、去重的實(shí)現(xiàn)語(yǔ)句,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-09-09
  • mysql 分頁(yè)優(yōu)化解析

    mysql 分頁(yè)優(yōu)化解析

    似乎討論分頁(yè)的人很少,難道大家都沉迷于limit m,n?在有索引的情況下,limit m,n速度足夠,可是在復(fù)雜條件搜索時(shí),where somthing order by somefield+somefieldmysql會(huì)搜遍數(shù)據(jù)庫(kù),找出“所有”符合條件的記錄,然后取出m,n條記錄。
    2008-04-04
  • MySQL主從同步延遲原因與解決方案

    MySQL主從同步延遲原因與解決方案

    本文主要介紹了MySQL主從同步延遲原因與解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法詳解

    centos7環(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
  • mysql 索引的基礎(chǔ)操作匯總(四)

    mysql 索引的基礎(chǔ)操作匯總(四)

    這篇文章主要為大家詳細(xì)介紹了mysql 索引的基礎(chǔ)操作匯總,涵蓋了創(chuàng)建和查看索引、刪除索引等操作,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評(píng)論