MySQL9.0新特性向量存儲的使用
MySQL 9.0 正式版已經(jīng)發(fā)布,其中一個亮點就是向量(VECTOR)數(shù)據(jù)類型的支持,本文給大家詳細(xì)介紹一下這個新功能。
向量類型
MySQL 9.0 增加了一個新的向量數(shù)據(jù)類型:VECTOR。它是一種可以存儲 N 個數(shù)據(jù)項的數(shù)據(jù)結(jié)構(gòu)(數(shù)組),定義方式如下:
VECTOR(N)
其中,每個數(shù)據(jù)項都是一個 4 字節(jié)的單精度浮點數(shù)。默認(rèn)的數(shù)據(jù)項為 2048 個,最大值為 16383。
向量類型的數(shù)據(jù)可以使用二進(jìn)制字符串或者列表分隔的字符串表示,例如:
CREATE TABLE t(id int, rgb vector(3)); INSERT INTO t VALUES (1, to_vector('[255,255,255]')); INSERT INTO t VALUES (2, to_vector('[128,255,0]')); INSERT INTO t VALUES (3, to_vector('[0,65,225]'));
向量函數(shù)
MySQL 9.0 同時還增加了一些用于操作 VECTOR 數(shù)據(jù)的向量函數(shù)。
首先,STRING_TO_VECTOR 函數(shù)用于將字符串形式的向量數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制,例如:
SELECT HEX(STRING_TO_VECTOR("[1.05, -17.8, 32]")); HEX(STRING_TO_VECTOR("[1.05, -17.8, 32]"))| ------------------------------------------+ 6666863F66668EC100000042 |
STRING_TO_VECTOR 函數(shù)的參數(shù)是一個字符串,包含一組由逗號分隔的浮點數(shù),并且使用方括號([])進(jìn)行引用。
TO_VECTOR 函數(shù)是 STRING_TO_VECTOR 函數(shù)的同義詞。
其次,VECTOR_TO_STRING 函數(shù)用于將向量數(shù)據(jù)轉(zhuǎn)換為字符串,例如:
SELECT VECTOR_TO_STRING(STRING_TO_VECTOR("[1.05, -17.8, 32]")); VECTOR_TO_STRING(STRING_TO_VECTOR("[1.05, -17.8, 32]"))| -------------------------------------------------------+ [1.05000e+00,-1.78000e+01,3.20000e+01] | SELECT VECTOR_TO_STRING(0x00000040000040400000A0400000E040); VECTOR_TO_STRING(0x00000040000040400000A0400000E040)| ----------------------------------------------------+ [2.00000e+00,3.00000e+00,5.00000e+00,7.00000e+00] |
輸出結(jié)果中的浮點數(shù)使用科學(xué)計數(shù)法表示。
FROM_VECTOR 函數(shù)是 VECTOR_TO_STRING 函數(shù)的同義詞。
最后,VECTOR_DIM 函數(shù)用于返回向量數(shù)據(jù)的維度,也就是數(shù)據(jù)項的個數(shù)。例如:
SELECT VECTOR_DIM(rgb) FROM t; VECTOR_DIM(rgb)| ---------------+ 3| 3| 3|
使用限制
VECTOR 數(shù)據(jù)類型存在以下限制:
- VECTOR 數(shù)據(jù)不能和其他類型的數(shù)據(jù)進(jìn)行比較,VECTOR 數(shù)據(jù)只能和其他 VECTOR 數(shù)據(jù)進(jìn)行等值比較。
- VECTOR 類型的字段不能作為任何類型的鍵值,包括主鍵、外鍵、唯一鍵以及分區(qū)鍵。
- VECTOR 類型的字段不能作為直方圖的統(tǒng)計源。
- 一些 MySQL 字符串函數(shù)可以使用 VECTOR 數(shù)據(jù)作為參數(shù),包括 BIT_LENGTH()、CHAR_LENGTH()、HEX()、LENGTH() 以及 TO_BASE64()。其他字符串函數(shù)不支持 VECTOR 類型的參數(shù)。
- VECTOR 數(shù)據(jù)可以作為以下加密函數(shù)的參數(shù):AES_ENCRYPT()、COMPRESS()、MD5()、SHA1()、SHA2()。其他加密函數(shù)不支持 VECTOR 類型的參數(shù)。
- VECTOR 數(shù)據(jù)可以作為 CASE 運算符和 COALESCE()、IFNULL()、NULLIF() 以及 IF() 函數(shù)的參數(shù)。
- VECTOR 數(shù)據(jù)可以作為 CAST(expression AS BINARY) 的參數(shù),結(jié)果返回 VECTOR 數(shù)據(jù)的二進(jìn)制字符串。CAST 函數(shù)不支持將數(shù)據(jù)轉(zhuǎn)換為 VECTOR 類型,推薦使用 STRING_TO_VECTOR 函數(shù)。
- 除了COUNT 函數(shù)之外,VECTOR 數(shù)據(jù)類型不能作為其他聚合函數(shù)或者窗口函數(shù)的參數(shù)。
- VECTOR 數(shù)據(jù)不能作為以下函數(shù)或運算符的參數(shù):數(shù)字函數(shù)和運算符、時間函數(shù)、全文檢索函數(shù)、XML 函數(shù)、位操作函數(shù)以及 JSON 函數(shù)。
總結(jié)
首先,對于向量數(shù)據(jù)的支持是一個重大的改進(jìn),可以為 MySQL 增加向量存儲功能。
不過,目前 MySQL 9.0 只有簡單的 VECTOR 數(shù)據(jù)類型和轉(zhuǎn)換函數(shù),還沒有提供向量相似度(余弦相似性、歐氏距離、內(nèi)積相似性等)檢索功能,以及優(yōu)化查詢性能的向量索引,距離一個實用的向量數(shù)據(jù)庫還有一些差距。
到此這篇關(guān)于MySQL9.0新特性向量存儲的使用的文章就介紹到這了,更多相關(guān)MySQL 9.0 向量存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql中日期的加減 date_add()、date_sub() 函數(shù)及用法小結(jié)
在Mysql中,date_add與date_sub分別是指對于日期的一個加減操作,date_add是指從日期中加上指定的時間間隔,date_sub是指從日期中減去指定的時間間隔,本文通過實例講解mysql中日期的加減 date_add()、date_sub() 函數(shù)及用法小結(jié),感興趣的朋友一起看看吧2023-11-11微信昵稱帶符號導(dǎo)致插入MySQL數(shù)據(jù)庫時出錯的解決方案
Mysql的utf8編碼最多3個字節(jié),而Emoji表情或者某些特殊字符是4個字節(jié),所以會導(dǎo)致帶有表情的昵稱插入數(shù)據(jù)庫時出錯,下面給大家分享下解決方案,需要的朋友參考下吧2016-12-12mysql8.0?.ibd文件恢復(fù)表結(jié)構(gòu)的實現(xiàn)
本文主要介紹了mysql8.0?.ibd文件恢復(fù)表結(jié)構(gòu)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10Mysql 數(shù)字類型轉(zhuǎn)換函數(shù)
Mysql 數(shù)字類型轉(zhuǎn)換函數(shù),有此需要的朋友可以參考下用法。2009-08-08