溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL 5.7新支持--------如何創(chuàng)建Json類型索引

發(fā)布時間:2020-06-01 10:40:14 來源:網(wǎng)絡(luò) 閱讀:757 作者:三月 欄目:MySQL數(shù)據(jù)庫

下面一起來了解下MySQL 5.7新支持--------如何創(chuàng)建Json類型索引,相信大家看完肯定會受益匪淺,文字在精不在多,希望MySQL 5.7新支持--------如何創(chuàng)建Json類型索引這篇短內(nèi)容是你想要的。

1. 背景

  * 在MySQL 5.7.8中,MySQL支持由RFC 7159定義的本地JSON數(shù)據(jù)類型,它支持對JSON(JavaScript對象標(biāo)記)文檔中的數(shù)據(jù)進(jìn)行有效訪問.

  * MySQL會對DML JSON數(shù)據(jù)自動驗證。無效的DML JSON數(shù)據(jù)操作會產(chǎn)生錯誤.

   * 優(yōu)化的存儲格式。存儲在JSON列中的JSON文檔轉(zhuǎn)換為一種內(nèi)部格式,允許對Json元素進(jìn)行快速讀取訪問.

   * MySQL Json類型支持通過虛擬列方式建立索引,從而增加查詢性能提升.

2. Json 索引

   * 創(chuàng)建Json索引表 json_key [ name 為虛擬列, virtual 表明不占用磁盤空間 ]

   [ GENERATED ALWAYS 與 VIRTUAL可以不寫 ]

        指定獲取json中的name key

mysql> CREATE TABLE json_key(
    -> uid BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    -> data JSON NOT NULL,
    -> name VARCHAR(32) GENERATED ALWAYS AS (json_extract(data, '$.name')) VIRTUAL,
    -> )ENGINE=INNODB CHARSET=utf8mb4;

   * 創(chuàng)建虛擬列name索引 

mysql> alter table users add key (name);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

   * 插入數(shù)據(jù)帶 data中name key [ 插入數(shù)據(jù)時需要顯示指定非虛擬列 ]

mysql> INSERT INTO json_key(uid, data) SELECT NULL, JSON_OBJECT('name', 'tom', 'sex', 'male', 'age', '26');
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

   * 插入數(shù)據(jù)不帶 data中name key

mysql> INSERT INTO json_key(uid, data) SELECT NULL, JSON_OBJECT('sex', 'female', 'age', '29');
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

   * 查看json_key所有數(shù)據(jù)

mysql> select * from json_key;
+-----+---------------------------------------------+-------+
| uid | data                                        | name  |
+-----+---------------------------------------------+-------+
|   1 | {"age": "26", "sex": "male", "name": "tom"} | "tom" |
|   2 | {"age": "29", "sex": "female"}              | NULL  |
+-----+---------------------------------------------+-------+
2 rows in set (0.01 sec)

3. 查詢測試

   * 通過json方法查詢

mysql> explain select * from json_key where json_extract(data, '$.name') = 'tom'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: json_key
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 2
     filtered: 100.00
        Extra: Using where
1 row in set, 1 warning (0.00 sec)

   * 通過虛擬列查詢

mysql> explain select * from json_key where name = 'tom'\G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: users

   partitions: NULL

         type: ref

possible_keys: name

          key: name

      key_len: 1023

          ref: const

         rows: 1

     filtered: 100.00

        Extra: NULL

1 row in set, 1 warning (0.01 sec)

4. 總結(jié)

以需求驅(qū)動技術(shù),技術(shù)本身沒有優(yōu)略之分,只有業(yè)務(wù)之分。

看完MySQL 5.7新支持--------如何創(chuàng)建Json類型索引這篇文章后,很多讀者朋友肯定會想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI