PolarDB MySQL版新增向量检索功能。该功能完全兼容MySQL 9.0原生向量检索语法,并可以通过列存索引(IMCI)的向量化执行和并行扫描,加速向量检索。
PolarDB MySQL版8.0版本且修订版本为8.0.2.2.27或以上,您可以通过内核版本说明确认集群的修订版本。
向量类型通过VECTOR(N)定义。例如可以通过如下方式在表t1中定义向量类型的列c1:
说明
以下示例表示在表t1中定义列c1的向量维度VECTOR=2。
CREATE TABLE t1 (id INT PRIMARY KEY, c1 VECTOR(2));说明
CREATE TABLE t1 (id INT PRIMARY KEY, c1 VECTOR(16384)); ERROR 9040 (HY000): Data size (65536 Bytes, 16384 dimensions) exceeds VECTOR max (65532 Bytes, 16383 dimensions) for column: 'c1'
SELECT STRING_TO_VECTOR('[1,2]');
+---------------------------+
| STRING_TO_VECTOR('[1,2]') |
+---------------------------+
| ?? @ |
+---------------------------+
1 row in set (0.00 sec)SELECT HEX(STRING_TO_VECTOR('[1,2]'));
+--------------------------------+
| HEX(STRING_TO_VECTOR('[1,2]')) |
+--------------------------------+
| 0000803F00000040 |
+--------------------------------+
1 row in set (0.00 sec)其中STRING_TO_VECTOR的输入为向量的字符串表示,输出为向量的Binary表示。
说明
SELECT STRING_TO_VECTOR('[1,2'); ERROR 9041 (HY000): Data cannot be converted to a valid vector: '[1,2'
SELECT VECTOR_TO_STRING(0x0000803F00000040);
+--------------------------------------+
| VECTOR_TO_STRING(0x0000803F00000040) |
+--------------------------------------+
| [1.000000,2.000000] |
+--------------------------------------+
1 row in set (0.00 sec)其中VECTOR_TO_STRING的输入为向量的Binary表示,输出为向量的字符串表示。
说明
mysql> SELECT VECTOR_TO_STRING(0x0000803F000000); ERROR 9041 (HY000): Data cannot be converted to a valid vector: ''
向量可以直接以Binary的形式写入。
INSERT INTO t1 VALUES(1, 0x0000803F00000040);查询t1表中向量[1,2]。
SELECT VECTOR_TO_STRING(c1) FROM t1;向量通过STRING_TO_VECTOR以字符串的形式写入。
INSERT INTO t1 VALUES(1, STRING_TO_VECTOR('[1,2]'));查询t1表中向量[1,2]。
SELECT VECTOR_TO_STRING(c1) FROM t1;通过DISTANCE可以以指定方式计算两个向量之间的相似度。可通过如下方式获取t1表中与向量[1.2,2.3]余弦距离最近的向量:
SELECT id, VECTOR_TO_STRING(c1) FROM t1;
+----+----------------------+
| id | VECTOR_TO_STRING(c1) |
+----+----------------------+
| 1 | [1.000000,2.000000] |
| 2 | [2.000000,3.000000] |
| 3 | [3.000000,4.000000] |
+----+----------------------+
3 rows in set (0.00 sec)SELECT id, VECTOR_TO_STRING(c1) FROM t1 ORDER BY DISTANCE(c1, STRING_TO_VECTOR('[1.2,2.3]'), 'COSINE') LIMIT 1;
+----+----------------------+
| id | VECTOR_TO_STRING(c1) |
+----+----------------------+
| 1 | [1.000000,2.000000] |
+----+----------------------+
1 row in set (0.00 sec)其中DISTANCE需要3个输入,前两个输入为向量,最后一个输入为相似度计算方法,目前支持COSINE,DOT和EUCLIDEAN,相似度计算方法的参数为字符串类型,需以引号包含。
参数说明
参数 | 说明 |
COSINE | 余弦相似度。 说明 衡量两个向量之间的方向相似性,结果为两个向量夹角的余弦值。 |
DOT | 点积。 说明 两个向量对应分量相乘后再相加的结果。 |
EUCLIDEAN | 欧式距离。 说明 衡量两个向量或点在欧几里得空间中的直线距离。 |
文章转载自胖橘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




