• Welcome to HiddenMerit - Clyde's Blog
  • Welcome to try the game Torn: Referral Link
  • If you are my relative, friend, or netizen, quickly press Ctrl+D to bookmark Clyde's Blog
  • This site has a like feature. If you read any article, please hit the like button so I know someone has visited
  • Email: hiddenmeritATgmail.com (replace AT with @)

MySQL 新技术系列第二期

DBA Clyde Jin 4周前 (04-23) 8次浏览 0个评论

📢 MySQL 新技术系列第二期

各位数据库同行、开发者朋友们,大家好!

欢迎回到「MySQL 新技术」系列。在第一期「告别 MySQL 8.0 时代,全景解读 MySQL 9.x 创新版」中,我们系统梳理了从 9.0 到 9.7 的版本策略与核心新特性,明确了 9.7 LTS 已接替 8.0 成为新一代长期支持版。

这一期,我们将聚焦一个贯穿整个 9.x 系列最令人兴奋的技术方向——向量检索(Vector Search)。从 9.0 引入原生 VECTOR 类型,到 9.7 LTS 向量能力的全面成熟,MySQL 正在从传统关系型数据库向「AI-Ready 数据平台」完成关键一跃。本文将带你全景解读 MySQL 向量检索的技术演进、内核实现、生产实践,并展望未来的发展方向。

一、为什么 MySQL 需要向量检索?

1.1 技术背景:从关键词匹配到语义理解

在大模型与检索增强生成(RAG)技术普及的当下,向量检索已从小众能力跃升为通用需求。关系型数据库作为企业数据架构的核心,长期以来以结构化数据管理、ACID 事务、成熟的 SQL 生态为核心优势,但在非结构化数据(文本、图片、音频)的语义检索场景中存在天然短板。

MySQL 作为全球使用最广泛的关系型数据库,也顺应这一趋势完成了向量检索能力的迭代,将向量检索纳入标准功能体系。

1.2 MySQL 引入向量检索的核心价值

价值维度 说明
架构简化 无需额外部署独立的向量数据库(如 Milvus、Chroma),在现有 MySQL 架构中统一管理结构化数据 + 向量数据,降低运维成本
能力互补 支持「SQL 条件过滤 + 向量相似性检索」的复合查询,例如「查询 2024 年发布的、与‘MySQL 向量检索’语义相似的技术文档」
生态兼容 依托 MySQL 成熟的事务机制、binlog、主从复制和备份策略,保障向量数据的安全性和稳定性

1.3 传统方案的痛点

在 MySQL 原生向量能力出现之前,用户往往面临两难选择:要么将向量数据存储为 TEXT/BLOB 类型,通过关键词匹配(LIKE/全文索引)检索,无法理解语义;要么引入独立的向量数据库,但需要面对两套安全模型、两套可观测性体系,以及难以回避的数据一致性问题。MySQL 原生向量检索的引入,正为解决这一困境而生。

二、MySQL 向量检索技术全景图

2.1 两条路径:原生支持 vs 插件扩展

目前,在 MySQL 生态中获取向量检索能力主要有两条路径:

方案 技术实现 适用版本 特点
原生 VECTOR MySQL 内核原生支持的 VECTOR 数据类型 + HNSW 索引 8.4 LTS / 9.x 系列 官方标准方案,与 MySQL 生态无缝集成
MyVector 插件 开源插件,通过 UDF 和组件机制扩展向量能力 8.0 / 8.4 填补了 8.0 用户无法升级至 8.4 时的能力缺口,无需更改表结构即可添加向量支持

两条路径并非互斥。对于已经运行在 8.0 且暂时无法升级的用户,MyVector 插件提供了平滑的过渡方案;而对于能够升级到 8.4 LTS 或更高版本的用户,原生 VECTOR 无疑是首选。

2.2 原生 VECTOR 数据类型

MySQL 9.0 首次引入了原生 VECTOR 数据类型,允许开发者直接在 MySQL 中存储和操作向量嵌入。

核心参数与函数

项目 说明
存储格式 每个条目为 4 字节单精度浮点值
默认最大长度 2048
绝对上限 16383
VECTOR_DIM() 返回向量的维度
STRING_TO_VECTOR() / TO_VECTOR() 将字符串格式转换为二进制向量表示
VECTOR_TO_STRING() / FROM_VECTOR() 将二进制向量转换为列表格式字符串
向量比较运算符 支持向量之间的等值比较

基本操作示例

-- 创建包含 VECTOR 列的表
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    embedding VECTOR(1536) NOT NULL
);

-- 插入向量数据
INSERT INTO products VALUES 
(1, 'MySQL 9.7 LTS 发布公告', STRING_TO_VECTOR('[0.12, -0.34, 0.56, ...]'));

-- 查询向量维度
SELECT VECTOR_DIM(embedding) FROM products;

-- 向量相似性检索
SELECT id, name, 
       VECTOR_DISTANCE(embedding, :search_vector, 'cosine') AS similarity
FROM products
ORDER BY similarity
LIMIT 10;
⚠️ DBA 提醒:第一代 VECTOR 实现存在显著限制——向量列不能作为任何类型的键(主键、外键、索引键),且部分函数兼容性有限。在规划大规模向量检索应用时,需充分考虑这一约束。

2.3 HNSW 向量索引

HNSW(Hierarchical Navigable Small World,分层可导航小世界图)是一种先进的近似最近邻(ANN)搜索算法,能够以 O(log N) 的时间复杂度实现高效的向量相似性检索。MySQL 8.4 LTS 首次将 HNSW 索引纳入标准功能体系,MySQL HeatWave 9.5.0 进一步支持自动创建向量索引。

HNSW 的核心优势在于其多层图结构:底层包含所有数据点,上层则是下层的子集,搜索时从上至下逐层定位,大幅缩小搜索范围。

向量索引创建示例(阿里云 PolarDB MySQL 版):

CREATE TABLE t1 (
    id INT PRIMARY KEY,
    v1 VECTOR(4) COMMENT 'imci_vector_index=HNSW(metric=COSINE, max_degree=16)'
);

其中 metric 参数指定距离度量方式(余弦距离、欧氏距离等),max_degree 控制图中每个节点的最大连接数,直接影响检索精度与构建速度的平衡。

2.4 向量距离函数

MySQL 提供了多种向量距离计算函数,用于衡量两个向量之间的相似度:

函数 距离类型 适用场景
VECTOR_DISTANCE(·, ·, 'COSINE') 余弦距离 文本相似度、语义匹配
VECTOR_DISTANCE(·, ·, 'EUCLIDEAN') 欧氏距离 图像特征、坐标点相似
VECTOR_DISTANCE(·, ·, 'DOT') 点积距离 经归一化后的向量相似度

实际使用中,余弦距离在文本语义检索场景中最为常用,因为它关注的是向量的方向而非模长。

三、MySQL HeatWave:AI 能力的集大成者

如果说原生 VECTOR 是 MySQL 向量检索的「地基」,那么 HeatWave 则是这座大厦的「顶配版本」。

3.1 自动向量存储(Auto Vector Store)

MySQL HeatWave 具备自动创建向量存储的能力:当加载的文件格式为 txt、html、json、doc 或 ppt 时,HeatWave Lakehouse 会自动解析加载的文件并生成向量嵌入,存入 VECTOR 类型列中,开发者无需手动处理嵌入生成和向量化流程。

3.2 自动向量索引创建(9.5.0)

从 MySQL 9.5.0 开始,HeatWave GenAI 支持对频繁查询的 VECTOR 列自动创建向量索引,使用 HNSW 等高级索引结构,实现加速的相似性搜索查询,在准确性与速度之间取得平衡。索引的创建和维护由系统自动完成,管理员无需手动介入,可以通过相关系统变量调整自动索引创建的参数。

3.3 混合搜索(Hybrid Search)

HeatWave 9.5.0 还引入了混合搜索能力,将语义搜索与关键词搜索的优势相结合。当查询中包含特定的产品名称、SKU 或品牌名等关键词信息时,混合搜索能够有效弥补纯语义搜索的不足,返回更高质量的检索结果。

3.4 HeatWave AutoML 增强

HeatWave AutoML 引入了深度推荐模型(Deep Recommendation models),基于 PyTorch 构建深度学习管道,通过生成用户和物品的嵌入向量,实现个性化推荐。同时,日志异常检测能力也得到了增强,通过从日志中提取语义特征,与现有的统计 TF-IDF 特征相结合,显著提升异常检测的准确性。

3.5 内置 RAG 支持

ML_RAG 例程支持检索增强生成,加载大语言模型并在可用的向量存储上进行语义搜索,结合私有数据与大模型,生成更精准的回答。开发者可使用 HEATWAVE_CHAT 例程,通过单个 SQL 命令实现自然语言搜索,大幅降低 AI 应用的开发门槛。

四、MyVector 插件:开源社区的向量解决方案

4.1 项目背景

MyVector 是由 Alkin Tezuysal 等开发者发起的开源 MySQL 插件项目,旨在为 MySQL 带来原生的向量存储和相似性搜索能力。它的设计思路非常务实:充分利用 MySQL 现有的 InnoDB 存储引擎,以加性方式(additive) 扩展向量能力——当向量检索功能出现问题时,OLTP 业务依然保持健康运行。

💡 技术洞察:MyVector 的核心设计原则是 「InnoDB 稳定性优先,向量能力可叠加」 ,这一理念使其成为生产环境向量检索落地的务实选择。

4.2 核心特性

特性 说明
VECTOR(n) 列 支持定义向量列存储密集嵌入(如 BERT 生成的 384 维向量)
HNSW 索引 在向量列上构建 HNSW 近似最近邻索引,实现 O(log N) 检索
距离函数 提供余弦距离、欧氏距离等多种向量距离计算函数
范围查询支持 支持带过滤条件的向量检索(如 WHERE user_id = X

4.3 与 ProxySQL 的协同

在 Pre-FOSDEM 2026 上,ProxySQL 创始人 René Cannaò 与 MyVector 作者 Alkin Tezuysal 联合展示了一套完整的生产级架构:MyVector 提供向量能力,ProxySQL 提供统一控制平面

架构要点:

  • ProxySQL 对流量进行分类,将 OLTP 写流量路由到主 hostgroup,将向量相似性查询路由到加载了 MyVector 插件的专用副本
  • 当向量流量激增、副本延迟上升时,ProxySQL 可自动卸载向量负载,避免影响 OLTP P99 延迟
  • 提供从零开始的渐进式迁移路径:先仅用 ProxySQL 做路由和观测,再逐步添加向量列和 HNSW 索引

该方案还提供了一个完整的 RAG 接入管道 CLI 工具(rag_ingest),支持从 MySQL 后端源增量获取数据、分块和转换文本、通过 OpenAI 兼容 API 批量生成嵌入向量、并将结果存回 MySQL 作为向量。

4.4 实战案例:带范围的向量检索

MyVector 的一个重要特性是支持 Scoped Vector Search,即带业务上下文过滤条件的向量检索。例如,在多租户系统中,确保向量相似性检索仅在当前用户的文档范围内进行,而非全局搜索。这一能力对于 RAG 应用至关重要——在问答系统中,检索必须限定在用户有权限访问的知识范围内。

五、性能与可观测性增强

5.1 JSON 优化器的变革

MySQL 9.0 完全重写了 JSON 优化器,带来了 JSON 查询性能的巨大变化。一位开发者的生产经验显示:在 8.0 中运行良好的 JSON_EXTRACT 查询,升级到 9.0 后从 0.3 秒变成了 2.1 秒——虽然优化器改进让部分查询变得更快,但也有查询性能下降。这一案例提醒我们,在进行版本升级时,必须对 JSON 相关的业务查询进行充分的性能回归测试。

5.2 多值索引与 JSON 数组

MySQL 9.0 引入了对 JSON 数组的多值索引支持,解决了长期以来 JSON 数组字段无法高效检索的问题:

-- 在 8.0 中需要全表扫描
-- 在 9.0 中可以创建多值索引
CREATE TABLE articles (
    id INT PRIMARY KEY,
    metadata JSON,
    INDEX idx_tags ((CAST(metadata->'$.tags' AS CHAR(50) ARRAY)))
);

-- 检索速度:8.0 约 450ms(10万行全表扫描)→ 9.0 约 12ms(索引查找)
SELECT * FROM articles WHERE 'mysql' MEMBER OF (metadata->'$.tags');

5.3 触发器延迟加载(9.1)

MySQL 9.1 优化了触发器的处理机制,将触发器的解析和执行分为两个阶段:第一阶段仅读取触发器元数据并存入全局缓存,第二阶段才在实际执行数据修改操作时进行完整解析。这一优化显著减少了仅执行只读查询时的资源消耗。

六、实战指南:从零搭建 MySQL RAG 应用

6.1 架构方案对比

方案 适用场景 优势 劣势
原生 VECTOR(8.4+ / 9.x) 新项目、追求官方标准 官方支持、与 MySQL 生态无缝集成 VECTOR 列不能作键,有功能限制
MyVector + ProxySQL 存量 8.0 系统、生产级要求 加性架构风险可控、支持多租户范围查询 需要额外部署 ProxySQL
MySQL HeatWave 云上部署、AI 深度集成 自动向量存储/索引、内置 RAG、混合搜索 需在 OCI/AWS 等云平台使用

6.2 选型决策树

开始
  │
  ├─ 是否在云上且可使用 HeatWave?
  │    └─ 是 → HeatWave(全自动 AI 能力)
  │
  ├─ 是否可以升级到 8.4 LTS 或 9.x?
  │    ├─ 是 → 原生 VECTOR + HNSW
  │    └─ 否 → MyVector + ProxySQL
  │
  └─ 是否需要多租户范围检索?
       └─ 是 → MyVector + ProxySQL

6.3 数据一致性考量

向量数据与业务结构化数据的一致性,是架构设计中必须慎重对待的问题。原生 VECTOR 存储于 InnoDB,与业务数据在同一个事务中,天然保证 ACID 一致性。MyVector 作为插件运行在 MySQL 内部,同样受 InnoDB 事务保护。相比之下,独立的向量数据库则面临两套存储系统间的数据同步难题。从一致性角度来看,MySQL 内生的向量方案具有根本性的架构优势。

6.4 性能调优要点

  • 索引参数调优max_degree 控制 HNSW 图中节点的最大连接数,值越大检索精度越高,但索引构建时间和内存占用也越大,需要根据数据规模权衡
  • 批量嵌入生成:使用 rag_ingest 工具时,可通过配置批量大小来控制嵌入生成 API 的调用频率,平衡吞吐量与 API 成本
  • 向量维度选择:常用的文本嵌入模型(如 text-embedding-3-small)输出 1536 维,注意不超过 MySQL VECTOR 的 16383 上限

七、限制与挑战

在拥抱 MySQL 向量检索能力的同时,也需要清醒认识到当前版本的限制:

限制项 说明 缓解方案
VECTOR 列不能作键 9.0 起 VECTOR 列无法作为主键、外键或索引键,影响分区表设计 使用辅助表存储向量+业务 ID 关联
HNSW 索引精度 近似最近邻搜索本质上是近似算法,无法保证 100% 召回精确的 K 个最近邻 适当增大 max_degree 和搜索深度参数
函数兼容性 VECTOR 类型不能与数值、字符串等类型直接比较,JSON、全文搜索等函数受限 在应用层完成类型转换和比较逻辑
社区版 vs 企业版 部分高级向量能力(如 HeatWave 自动索引)仅在云版/企业版中提供 社区版用户可选用 MyVector 插件
⚠️ DBA 特别提醒:在决定将向量检索引入生产系统之前,务必在类生产环境中进行充分的性能测试,特别是包含 VECTOR 列与业务表 JOIN 的复合查询场景。

八、未来展望

8.1 技术演进方向

从 9.0 到 9.7,MySQL 向量检索能力的演进主线清晰可见:

  • 版本 9.0:VECTOR 数据类型首秀,打好基础
  • 版本 8.4 LTS:HNSW 向量索引纳入标准功能
  • 版本 9.5:HeatWave 自动向量索引创建、混合搜索
  • 版本 9.7 LTS:向量能力的全面成熟与稳定

8.2 未来可期待的特性

展望 10.x 创新版,社区期待看到以下方向的突破:

  • VECTOR 列支持作为索引键:当前最大的功能限制
  • 更多向量索引类型:如 IVF、Product Quantization 等
  • 向量压缩与量化:降低大规模向量数据的存储成本
  • 更紧密的 AI 模型集成:在数据库内直接运行轻量级嵌入模型

8.3 行业趋势

MySQL 向量检索的演进,反映了关系型数据库在 AI 时代的重要转型方向。Uber 已将数千个集群迁移至 MySQL Group Replication,故障转移时间从分钟级降至秒级,MySQL 在高可用领域的突破同样令人瞩目。AI 能力与高可用能力的双重进化,正在重新定义 MySQL 作为企业级数据平台的价值边界。

九、总结

本期我们全景解读了 MySQL 9.x 系列在向量检索领域的技术演进:

  • 原生 VECTOR 数据类型HNSW 向量索引,使 MySQL 能够原生支撑 RAG、语义搜索等 AI 应用场景
  • MySQL HeatWave 提供了自动向量存储、自动索引创建、混合搜索和内置 RAG 等高级 AI 能力
  • MyVector 插件为 8.0 用户和开源社区提供了务实的选择,与 ProxySQL 协同可实现生产级的向量检索架构
  • 原生方案 vs 插件方案 vs HeatWave 三条路径各有适用场景,关键在于根据业务需求和部署环境做出合理选择
  • 当前版本仍存在 VECTOR 列不能作键、函数兼容性等限制,需在架构设计中妥善应对

MySQL 向量检索的成熟,意味着企业可以在不引入额外数据库组件的情况下,在现有 MySQL 架构中构建 RAG 应用、语义搜索和推荐系统——这既是架构简化的胜利,也是 MySQL 向「AI-Ready 数据平台」转型的重要里程碑。

下一期预告:MySQL 新技术系列第三期——「MySQL 9.x 多语言引擎深度解析:JavaScript 存储程序从入门到生产」。我们将深入探讨 MLE 组件的工作原理、JavaScript 存储程序的实战应用场景、与 SQL/PSM 的对比分析,以及在 Percona Server 等开源发行版中的最新进展。敬请期待!

欢迎大家在评论区留言交流,告诉我你最想深入了解的主题,我会在后续系列中优先安排!

📚 参考资料

  • MySQL 9.0 Reference Manual – VECTOR Data Type
  • MySQL 8.4 LTS Release Notes – HNSW Vector Index
  • MySQL HeatWave 9.5.0 Release Notes – AutoML & GenAI Enhancements
  • ProxySQL Blog: Making MySQL AI-Ready
  • Bytebase: What’s New in MySQL 9
  • Oracle Blog: Improve Primary Selection on Failover
  • Oracle Blog: Accelerate Similarity Search with Automatic HeatWave Vector Index
  • Tencent Cloud: MySQL 向量检索深度解析
  • Percona Blog: JavaScript Stored Routines
  • ITHome: MySQL 9.3 发布
  • FOSDEM 2025: MyVector Plugin Introduction

绩隐金 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL 新技术系列第二期
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址