You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
功能
向量类型
复制全文
下载 pdf
向量类型
本文介绍云数据库 MySQL 版提供的向量检索特性的相关信息。​
支持版本​
  • MySQL 8.0 版本,且内核小版本为 MySQL 8.0.32_20250815 及以上。​
  • MySQL 8.4 版本,且内核小版本为 MySQL 8.4.7_20260415 及以上。​
背景​
随着人工智能和机器学习技术的快速发展,向量数据在各类智能应用场景中发挥着愈发重要的作用。在图像识别、自然语言处理、推荐系统等人工智能应用领域,需将非结构化数据(如图像、文本、音频)转化为高维向量,以便进行存储和检索。传统数据库缺乏对原生向量数据类型的支持,开发者仅能采用 TEXT 或 BLOB 类型存储向量的字符串表示形式。此方式不仅存储效率欠佳,而且无法开展高效的向量运算。​
云数据库 MySQL 版通过引入 MySQL 9.0 原生 VECTOR 数据类型,为向量数据的存储提供了解决方案。​
  • 原生向量存储:VECTOR 类型采用 4 字节单精度浮点数存储向量的每个维度,支持 1~16383 维的向量数据。​
  • SQL 标准兼容:完全兼容标准 SQL 语法,开发者可以使用熟悉的 SQL 语句进行向量数据的增删改查操作。​
特性介绍​
VECTOR 数据类型​
VECTOR 数据类型用于存储固定维度的向量数据:​
​
语法​
说明​
维度范围​
存储格式​
VECTOR(N)​
N 维向量类型​
1~16383​
4 字节单精度浮点数​
​
向量基本函数​
​
函数名​
语法​
说明​
示例​
TO_VECTOR/ STRING_TO_VECTOR​
TO_VECTOR(text)​
STRING_TO_VECTOR(text)​
将字符串转换为向量类型​
TO_VECTOR('[1,2,3,4]')​
STRING_TO_VECTOR('[1,2,3,4]')​
FROM_VECTOR/ VECTOR_TO_STRING​
FROM_VECTOR(vector)​
VECTOR_TO_STRING(vector)​
将向量类型转换为可读字符串​
​
FROM_VECTOR(vector_column)​
VECTOR_TO_STRING(vector_column)​
VECTOR_DIM​
VECTOR_DIM(vector)​
获取向量的维度​
VECTOR_DIM('[1,2,3,4]')​
​
向量数学运算函数​
​
函数名​
语法​
说明​
VECTOR_NORM​
VECTOR_NORM(vector)​
计算向量的 L2 范数(欧几里得长度)​
VECTOR_NORMALIZE​
VECTOR_NORMALIZE(vector)​
向量归一化,使模长为 1​
VECTOR_ADD​
VECTOR_ADD(vector1, vector2, ...)​
向量逐元素加法​
VECTOR_SUB​
VECTOR_SUB(vector1, vector2, ...)​
向量逐元素减法​
VECTOR_MUL​
VECTOR_MUL(vector1, vector2, ...)​
向量逐元素乘法(Hadamard 积)​
​
向量距离计算函数​
​
函数名​
语法​
说明​
L1_DISTANCE​
L1_DISTANCE(vector1, vector2)​
曼哈顿距离​
L2_DISTANCE/ EUCLIDEAN_DISTANCE​
L2_DISTANCE(vector1, vector2)​
EUCLIDEAN_DISTANCE(vector1, vector2)​
欧几里得距离​
L2_SQUARED_DISTANCE​
L2_SQUARED_DISTANCE(vector1, vector2)​
平方欧几里得距离​
COSINE_DISTANCE​
COSINE_DISTANCE(vector1, vector2)​
余弦距离​
INNER_PRODUCT​
INNER_PRODUCT(vector1, vector2)​
内积(点积)​
NEGATIVE_INNER_PRODUCT​
NEGATIVE_INNER_PRODUCT(vector1, vector2)​
负内积​
SPHERICAL_DISTANCE​
SPHERICAL_DISTANCE(vector1, vector2)​
球面距离​
注意​
该函数要求输入参数为单位向量,否则计算结果为 0。使用前请先使用 VECTOR_NORMALIZE 函数对向量进行归一化处理。​
​
使用说明及示例​
基础向量操作​
  • 创建包含向量列的表​
  • ​
    -- 创建商品特征表,存储4维的商品向量特征​
    CREATE TABLE product_features (​
    product_id INT PRIMARY KEY,​
    product_name VARCHAR(255),​
    category VARCHAR(100),​
    feature_vector VECTOR(4),​
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP​
    ) ENGINE=InnoDB;​
    ​
  • 插入向量数据​
  • ​
    -- 插入商品向量数据​
    INSERT INTO product_features (product_id, product_name, category, feature_vector) ​
    VALUES ​
    (1, '手机', '电子产品', TO_VECTOR('[0.1, 0.2, 0.3, 0.4]')),​
    (2, '手机', '电子产品', TO_VECTOR('[0.15, 0.25, 0.28, 0.38]')),​
    (3, '手机', '电子产品', TO_VECTOR('[0.12, 0.22, 0.32, 0.42]'));​
    ​
  • 查询和显示向量数据​
  • ​
    -- 查询向量数据(以可读格式显示)​
    SELECT ​
    product_id,​
    product_name,​
    FROM_VECTOR(feature_vector) AS readable_vector​
    FROM product_features ​
    WHERE product_id = 1;​
    ​
  • 返回示例如下:​
  • ​
    +------------+--------------+---------------------------------------------------+​
    | product_id | product_name | readable_vector |​
    +------------+--------------+---------------------------------------------------+​
    | 1 | 手机 | [1.00000e-01,2.00000e-01,3.00000e-01,4.00000e-01] |​
    +------------+--------------+---------------------------------------------------+​
    ​
向量数学运算​
  • 向量归一化​
  • ​
    -- 对商品特征向量进行归一化处理​
    SELECT ​
    product_id,​
    product_name,​
    VECTOR_NORM(feature_vector) AS original_norm,​
    FROM_VECTOR(VECTOR_NORMALIZE(feature_vector)) AS normalized_vector​
    FROM product_features;​
    ​
  • 返回示例如下:​
  • ​
    +------------+--------------+--------------------+---------------------------------------------------+​
    | product_id | product_name | original_norm | normalized_vector |​
    +------------+--------------+--------------------+---------------------------------------------------+​
    | 1 | 手机 | 0.5477225697477194 | [1.82574e-01,3.65148e-01,5.47723e-01,7.30297e-01] |​
    | 2 | 手机 | 0.5547972592143449 | [2.70369e-01,4.50615e-01,5.04689e-01,6.84935e-01] |​
    | 3 | 手机 | 0.5844655535095068 | [2.05316e-01,3.76412e-01,5.47509e-01,7.18605e-01] |​
    +------------+--------------+--------------------+---------------------------------------------------+​
    ​
相似性搜索​
  • 基于余弦相似度的商品推荐​
  • ​
    -- 查找与指定商品最相似的5个商品​
    SET @target_vector = (SELECT feature_vector FROM product_features WHERE product_id = 1);​
    ​
    SELECT ​
    p.product_id,​
    p.product_name,​
    p.category,​
    COSINE_DISTANCE(p.feature_vector, @target_vector) AS similarity_score​
    FROM product_features p​
    WHERE p.product_id != 1​
    ORDER BY similarity_score ASC​
    LIMIT 5;​
    ​
  • 返回示例如下:​
  • ​
    +------------+--------------+--------------+------------------------+​
    | product_id | product_name | category | similarity_score |​
    +------------+--------------+--------------+------------------------+​
    | 3 | 手机 | 电子产品 | 0.00039043972636043645 |​
    | 2 | 手机 | 电子产品 | 0.009461057988503607 |​
    +------------+--------------+--------------+------------------------+​
    ​
  • 基于欧几里得距离的近邻搜索​
  • ​
    -- 查找距离目标向量最近的商品​
    SELECT ​
    product_id,​
    product_name,​
    L2_DISTANCE(feature_vector, TO_VECTOR('[0.1, 0.2, 0.3, 0.4]')) AS distance​
    FROM product_features​
    ORDER BY distance ASC​
    LIMIT 10;​
    ​
  • 返回示例如下:​
  • ​
    +------------+--------------+----------------------+​
    | product_id | product_name | distance |​
    +------------+--------------+----------------------+​
    | 1 | 手机 | 0 |​
    | 3 | 手机 | 0.039999976211686064 |​
    | 2 | 手机 | 0.07615773363159213 |​
    +------------+--------------+----------------------+​
    ​
向量聚合分析​
  • 向量相似度矩阵计算​
  • ​
    -- 计算所有商品之间的相似度矩阵​
    SELECT ​
    p1.product_id AS product1_id,​
    p1.product_name AS product1_name,​
    p2.product_id AS product2_id,​
    p2.product_name AS product2_name,​
    COSINE_DISTANCE(p1.feature_vector, p2.feature_vector) AS cosine_similarity,​
    L2_DISTANCE(p1.feature_vector, p2.feature_vector) AS euclidean_distance​
    FROM product_features p1​
    CROSS JOIN product_features p2​
    WHERE p1.product_id < p2.product_id​
    ORDER BY cosine_similarity ASC;​
    ​
  • 返回示例如下:​
  • ​
    +-------------+---------------+-------------+---------------+------------------------+----------------------+​
    | product1_id | product1_name | product2_id | product2_name | cosine_similarity | euclidean_distance |​
    +-------------+---------------+-------------+---------------+------------------------+----------------------+​
    | 1 | 手机 | 3 | 手机 | 0.00039043972636043645 | 0.039999976211686064 |​
    | 2 | 手机 | 3 | 手机 | 0.006352599451149077 | 0.07071067074295588 |​
    | 1 | 手机 | 2 | 手机 | 0.009461057988503607 | 0.07615773363159213 |​
    +-------------+---------------+-------------+---------------+------------------------+----------------------+​
    ​
注意事项​
  • VECTOR 列当前版本暂不支持用作主键、外键、唯一键或分区键。​
  • VECTOR 列不能用作直方图的来源。​
  • VECTOR 类型只支持相等性比较(=,!=),不支持大小比较(>,<,>=,<=)​
  • VECTOR 类型支持和不支持的函数如下:​
  • VECTOR 值可以和 MySQL 的字符串函数 BIT_LENGTH、CHAR_LENGTH、HEX、LENGTH 以及 TO_BASE64 一起使用,其他字符串函数不接受 VECTOR 类型作为参数。​
  • VECTOR 可以作为加密函数 AES_ENCRYPT、COMPRESS、MD5、SHA1 和 SHA2 的参数。其他加密函数不支持 VECTOR 类型参数。​
  • VECTOR 可以作为 CASE 运算符及相关的流程控制函数(如 COALESCE、IFNULL、NULLIF 和 IF)的参数。​
  • VECTOR 可以作为 CAST (expression AS BINARY) 的参数,结果是一个内容与 VECTOR 参数相同的二进制字符串。但通过 CAST 转换为 VECTOR 不被支持,作为替代,可以使用 STRING_TO_VECTOR / TO_VECTOR 将合法的向量字符串转换为 VECTOR。​
  • VECTOR 数据类型不能作为除 COUNT [DISTINCT] 外的聚合函数或窗口函数的参数。​
  • VECTOR 不能作为以下类型函数或操作符的参数:​
  • 数值函数和操作符​
  • 时间函数​
  • 全文搜索函数​
  • XML 函数​
  • 位函数(如按位与 AND、按位或 OR)​
  • JSON 函数​
最近更新时间:2026.08.27 11:24:31
这个页面对您有帮助吗?
有用
有用
无用
无用