您好,登錄后才能下訂單哦!
下面一起來了解下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è)資訊欄目。
免責(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)容。