MySQL 5.7新支持--------Json索引創建實戰
阿新 • • 發佈:2017-06-30
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索引創建實戰