1. 程式人生 > >MySQL 5.7新支持--------Json索引創建實戰

MySQL 5.7新支持--------Json索引創建實戰

mysql dba 索引 json

1. 背景

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

  * MySQL會對DML JSON數據自動驗證。無效的DML JSON數據操作會產生錯誤.

* 優化的存儲格式。存儲在JSON列中的JSON文檔轉換為一種內部格式,允許對Json元素進行快速讀取訪問.

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


2. Json 索引

* 創建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;


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

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


* 插入數據不帶 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所有數據

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)


4. 總結


以需求驅動技術,技術本身沒有優略之分,只有業務之分。

本文出自 “sea” 博客,請務必保留此出處http://lisea.blog.51cto.com/5491873/1943389

MySQL 5.7新支持--------Json索引創建實戰