重要前置说明:原生
VECTOR列类型是MySQL 9.0+ 社区版 即可使用的;而库内 LLM 推理、ML_RAG检索生成、ML_TRAINAutoML 等完整 AI 流水线,属于MySQL HeatWave GenAI / 企业本地 MySQL AI 的能力。下文分层讲解,你可以按自己的环境对号入座。
一、MySQL 9.0+ AI 能力全景
在深入原理之前,我们需要先建立一个全局认知:MySQL 9.x 的 AI 能力不是某一个孤立功能的加入,而是一整套从存储层到计算层再到编排层的系统性扩展。理解这个分层架构,是后续所有实践的基础。
存储层(L1) 是最基础的一层,也是社区版就能用的部分。核心变化是引入了VECTOR(N)原生列类型,允许你在 InnoDB 表中直接存储高维浮点向量。这些向量以 Float32 数组的二进制形式序列化,小向量(≤768 bytes)直接存在 B-Tree 叶子页中,大向量则溢出到 overflow page,存储策略类似BLOB。这一层的设计非常克制——向量列不能做主键、不能做外键、不能建唯一索引、不能参与分区键。这些限制不是实现上的偷懒,而是高维向量在语义上就不适合精确匹配和范围扫描,强行套用 B-Tree 只会得到错误的查询结果。
计算层(L2) 在存储层之上提供了向量距离运算能力。MySQL 9.x 新增了<=>向量距离运算符,以及STRING_TO_VECTOR、VECTOR_TO_STRING、VECTOR_DIM等内置函数。支持三种距离度量:余弦距离(适合文本语义检索)、L2 欧氏距离(适合图像特征匹配)、内积(适合已归一化向量)。这些运算目前是逐行扫描执行的,对于百万级以上的向量检索,需要依赖 HeatWave 的 scale-out 近似最近邻(ANN)引擎来加速。
编排层(L3) 是 HeatWave GenAI 带来的质变。它将 embedding 编码、向量检索、Prompt 组装、LLM 推理串联成一个完整的sys.ML_RAG调用。你只需要传入一个自然语言问题,系统自动完成"问题向量化 → 向量检索 Top-K → 上下文拼接 → LLM 生成 → 引用溯源"的全链路。这一层的核心价值在于:数据不需要离开数据库,SQL 就是 AI 应用的统一入口。
智能层(L4) 进一步提供了 AutoML 能力。通过sys.ML_TRAIN存储过程,MySQL 可以在库内自动完成特征选择、算法搜索(XGBoost / RandomForest / Logistic Regression 等)、超参调优和交叉验证。训练好的模型通过sys.ML_PREDICT_TABLE进行批量推理,预测结果直接写回数据库表。整个 ML 生命周期不需要 ETL 到 Python 或 Spark,数据不出库,合规性和安全性都有保障。
下面是这四层架构的全局视图:
二、底层原理深度拆解
理解了架构分层之后,我们深入每一层的技术细节,搞清楚"为什么这样设计"以及"实际运行中发生了什么"。
2.1 向量列的物理存储原理
当你执行CREATE TABLE t (emb VECTOR(384))时,MySQL 在 InnoDB 中做的事情远比看起来复杂。首先,384 维 Float32 向量占用 384 × 4 = 1536 bytes,这已经超过了 InnoDB 页内单行数据的推荐阈值。因此,InnoDB 采用了与BLOB类似的存储策略:向量数据的前 768 bytes 存在 B-Tree 叶子页中,超出部分存储在独立的 overflow page 链上。向量前面还有一个 header prefix,记录维度元信息,用于运行时快速校验。
这个设计带来了一个重要推论:向量列的读取涉及随机 I/O(overflow page 可能不在内存中),因此在高并发场景下,向量列的访问延迟会高于普通数值列。如果你的应用需要频繁扫描大量向量,应该考虑将向量表与业务表分离,或者利用 HeatWave 的内存列存引擎来加速。
为什么向量列不能做索引键?根本原因在于高维向量的"维度灾难"。在 384 维空间中,几乎所有向量对之间的距离都趋于相等(距离集中现象),B-Tree 依赖的有序性在高维空间中完全失效。即使你强行对向量做 B-Tree 索引,查询优化器也无法利用它进行有效的范围剪枝。因此 MySQL 直接禁止了这种用法,引导你使用专门的向量索引(如 HNSW、IVF)或 HeatWave 的 ANN 引擎。
2.2 向量相似度计算引擎
向量相似度计算是 RAG 和语义检索的核心。MySQL 9.x 支持三种距离度量,每种都有其数学特性和适用场景。
余弦距离 的计算方式是1 - (A·B / |A|·|B|),它衡量的是两个向量方向的一致性,对向量的长度(模)不敏感。这意味着无论文本长短,只要语义相近,embedding 向量的方向就会接近,余弦距离就会很小。这是文本语义检索的首选度量。
L2 欧氏距离 计算的是√Σ(Ai - Bi)²,它同时受向量方向和模长的影响。在图像特征匹配中,特征向量通常已经过归一化处理,此时 L2 距离与余弦距离等价。但在未归一化的场景下,L2 距离可能会因为向量模长的差异而产生误导性的结果。
内积A·B在向量已归一化时与余弦相似度等价,计算开销最小。如果你的 embedding 模型输出的是归一化向量(如multilingual-e5-small),使用内积可以获得最佳性能。
距离计算目前是逐行执行的,优化器不会自动将向量距离计算下推到存储引擎层。这意味着即使你只需要 Top-10 最近邻,MySQL 也会扫描全表计算每一行的距离然后排序。对于生产环境的大规模向量检索,必须使用 HeatWave 的 ANN 引擎,它通过分层可导航小世界(HNSW)图结构实现了近似最近邻搜索,将检索复杂度从 O(N) 降低到 O(log N)。
2.3 RAG 检索生成的完整流水线
RAG(Retrieval-Augmented Generation,检索增强生成)是 MySQL HeatWave GenAI 最核心的能力。它的设计目标是让 LLM 的回答基于你自己的业务数据,而不是依赖模型的训练记忆,从而解决幻觉问题并提供可溯源的引用。
整个流水线分为四个阶段:
第一阶段:查询向量化。 用户的自然语言问题被发送到 embedding 服务,使用multilingual-e5-small模型编码为 384 维向量。这个模型支持 100+ 语言,对中文语义的理解质量在同类小模型中表现优秀,且推理速度快,适合实时查询。
第二阶段:向量检索。 查询向量与向量库中的文档片段进行余弦距离计算,返回距离最小的 Top-K 个片段。这里的 Top-K 不是固定值,而是根据上下文窗口大小和片段长度动态调整的,确保拼接后的 Prompt 不超过 LLM 的上下文限制。
第三阶段:Prompt 组装与生成。 系统将检索到的文本片段作为上下文,与用户问题一起组装成 Prompt,发送给 LLM Runtime。系统 Prompt 中包含了明确的指令,要求 LLM 仅基于提供的上下文回答问题,如果上下文不足以回答,则如实告知用户。
第四阶段:引用溯源。 LLM 生成的答案会附带citations数组,每个引用包含原文片段、来源文档、页码和距离分数。这是生产环境的关键特性——它让每一句 AI 生成的回答都可以被审计和验证。
2.4 AutoML 的库内执行模型
传统 ML 工作流需要数据工程师将数据库中的数据导出到 Python 环境,进行特征工程、模型训练、超参调优,然后将模型部署为 API 服务,最后应用通过 API 调用模型。这个流程涉及多个系统、多次数据搬运,开发周期长,运维复杂。
MySQL HeatWave 的 AutoML 将整个流程压缩到 SQL 调用中。当你执行CALL sys.ML_TRAIN('db.table', 'target_column', ...)时,系统自动完成以下子步骤:
- 特征选择:自动识别表中的数值列、类别列、文本列,对类别列进行编码,对文本列进行 TF-IDF 或 embedding 转换。
- 算法搜索:在 XGBoost、RandomForest、Logistic Regression、SVM 等候选算法中自动选择最适合当前数据和任务的算法。
- 超参调优:使用贝叶斯优化策略在超参空间中搜索最优配置,比网格搜索效率高得多。
- 交叉验证:使用 K-Fold 交叉验证评估模型稳定性,选择泛化能力最好的模型版本。
训练完成后,模型以序列化形式存储在 MySQL 内部表中。推理时通过sys.ML_PREDICT_TABLE对整张表批量打分,结果直接写入指定的输出表。整个过程中数据从未离开数据库进程,消除了数据泄露风险,也避免了网络传输开销。
下图展示了 AutoML 从数据准备到推理落库的完整执行链路,重点标注了每一步的输入、处理动作和输出:
各阶段说明:
阶段 | 核心动作 | 关键设计 |
|---|---|---|
数据准备 | 通过 SQL 视图完成特征预处理 | 类型自动推断,缺失值自动处理,无需导出 |
特征选择 | 自动区分数值/类别/文本列并转换 | 文本列支持 TF-IDF 或 embedding 转换 |
算法搜索 | 在 XGBoost、RF、LR、SVM 中择优 | 根据数据规模和任务类型自动剪枝候选集 |
超参调优 | 贝叶斯优化多轮迭代 | 比网格搜索效率高,避免组合爆炸 |
交叉验证 | K-Fold 评估泛化能力 | 防止过拟合,选择最稳定的模型版本 |
批量推理 | 加载最优模型对整表打分 | 结果直接写回数据库,无需 API 中转 |
可解释性 | SHAP 值分析特征贡献度 | 每个预测都附带特征贡献度,满足合规要求 |
三、实践落地:从零到生产的完整路径
理论讲完,现在进入实操环节。我按照生产环境的真实落地流程,分四个阶段逐步推进。
Phase 1:环境准备与升级
如果你当前运行的是 MySQL 5.7 或 8.0,需要先升级到 9.x。官方推荐的平滑升级路径是8.0 → 8.4 LTS → 9.x Innovation。8.4 LTS 是一个长期支持版本,先升级到 8.4 可以让你的应用在中间版本上充分验证兼容性,确认无误后再升级到 9.x。
升级前必须做全量备份。使用mysqldump --single-transaction确保备份一致性,加上--routines --triggers导出存储过程和触发器。对于大型数据库,建议使用物理备份工具(如 Percona XtraBackup)来缩短备份窗口。
安装 MySQL 9.x 后,运行mysql_upgrade工具升级系统表。然后验证向量能力:执行CREATE TABLE _probe (c1 VECTOR(8));,如果不报错说明向量引擎就绪。注意,MySQL 8.0 完全不支持VECTOR语法,在 8.0 上执行建表语句会报 1064 语法错误,这是最常见的升级踩坑点。
Phase 2:向量存储与基础检索(社区版可用)
向量表的设计需要仔细考虑。首先,向量维度必须与你的 embedding 模型输出维度匹配。multilingual-e5-small输出 384 维,所以VECTOR(384)是正确的选择。其次,向量列通常配合一个文本列存储原始文本,方便检索后展示。第三,虽然向量列不能建 B-Tree 索引,但你可以对文本列建 FULLTEXT 索引作为辅助过滤条件,先通过关键词缩小候选集,再在候选集上计算向量距离。
写入向量数据时,你需要先将文本通过 embedding 模型编码为向量,然后以STRING_TO_VECTOR('[0.021,0.114,...]')的形式写入。在生产环境中,这个编码步骤通常由应用层完成(调用 embedding API),然后将向量和文本一起写入 MySQL。
查询时,使用<=>运算符计算余弦距离,按距离升序排列取 Top-K。注意<=>返回的是距离值,越小表示越相似。如果需要相似度分数(越大越相似),可以用1 - (emb <=> query_vec)转换。
Phase 3:HeatWave RAG 完整落地
当你有了 HeatWave GenAI 环境(OCI 或 AWS),RAG 的落地变得极为简洁。第一步是将业务文档灌入自动化向量库。支持 PDF、TXT、HTML、DOC、PPT 等多种格式,文档可以存放在对象存储中。调用sys.VECTOR_STORE_LOAD存储过程,指定对象存储 URI、目标 schema 和表名,系统自动完成文档解析、文本切片、embedding 编码和向量写入。整个过程无需编写任何解析代码。
第二步是查询。调用sys.ML_RAG传入自然语言问题,系统自动完成向量化、检索、生成和引用组装。返回的 JSON 结果包含text(答案文本)和citations(引用数组)。每个引用包含原文片段、来源文档名、页码和距离分数。这些引用是生产环境可信度的基石——用户可以点击引用查看原文,验证 AI 的回答是否准确。
如果需要多轮对话,可以使用sys.heatwave_chat。它自动维护会话历史,后续问题会携带之前的对话上下文,实现连贯的追问体验。
Phase 4:AutoML 预测流水线
AutoML 的落地同样简洁。假设你的订单宽表中有一个will_rebuy列标记用户是否复购,你想训练一个模型来预测新用户的复购概率。只需调用sys.ML_TRAIN指定表名、目标列和任务类型(classification),系统自动完成所有训练步骤。训练完成后,通过sys.ML_PREDICT_TABLE对等待预测的数据批量打分,结果写入指定的输出表。
这个流程的精妙之处在于:特征工程、模型选择、超参调优全部自动化,你不需要成为 ML 专家也能获得高质量的预测模型。同时,数据不出库意味着不需要担心数据隐私合规问题,也不需要维护额外的 ML 基础设施。
四、架构选型决策树
面对不同的业务需求和技术约束,如何选择正确的部署方案?这个决策树覆盖了最常见的场景。
如果你的需求仅限于向量存储和相似度检索,MySQL 9.x 社区版完全够用,不需要任何额外组件,纯 CPU 即可运行。如果你需要 RAG 检索生成或 AutoML 能力,则需要 HeatWave GenAI 或企业版。此时关键决策点是数据能否上云:如果数据可以放在云端(OCI 或 AWS),HeatWave 云端方案提供弹性扩展能力,最多支持 512 个节点;如果数据不能出机房(金融、政务、医疗等强合规场景),则需要部署 MySQL AI 企业版,在本地环境中获得完整的 GenAI 能力。
无论选择哪种方案,SQL 都是统一的编程接口。这意味着你的应用代码不需要因为部署环境的变化而大幅修改,只需要调整连接配置和权限设置。
五、生产避坑指南
在帮助多个团队落地 MySQL AI 能力的过程中,我总结了以下最常见的陷阱和对应的正确做法。
陷阱一:在 MySQL 8.0 上尝试使用 VECTOR 列。 8.0 系列完全不支持向量语法,执行建表语句会直接报 1064 语法错误。正确做法是先升级到 9.0+。
陷阱二:对 VECTOR 列建 B-Tree 索引。 MySQL 明确禁止这种用法,因为高维向量不适合 B-Tree 有序性。如果需要加速检索,应该使用 HeatWave 的 ANN 引擎,或者采用"关键词预过滤 + 向量精排"的混合策略。
陷阱三:社区版调用sys.ML_RAG或sys.ML_TRAIN。 这些存储过程只在 HeatWave GenAI / 企业版中提供,社区版中不存在。如果你只有社区版,可以自己实现 RAG 流水线(应用层调用 embedding API + 向量检索 + LLM API),MySQL 只负责向量存储和距离计算。
陷阱四:Embedding 模型混用。 查询时使用的 embedding 模型必须与文档入库时使用的模型一致,否则向量空间不同,距离计算完全没有意义。HeatWave 9.3+ 默认使用multilingual-e5-small,如果你在应用层自行编码,务必确保使用相同的模型。
陷阱五:试图用 MySQL 向量列替代专用向量数据库。 MySQL 的向量能力定位是"结构化业务数据 + 轻量语义增强"的混合场景。如果你的核心需求是高 QPS、大规模向量检索(如亿级向量、毫秒级响应),应该使用 Milvus、Qdrant 等专用向量数据库,MySQL 负责结构化数据管理,两者通过应用层协同。
六、总结
MySQL 9.x 的 AI 能力升级代表了一种范式转变。过去,构建一个 AI 驱动的应用需要拼接 MySQL + 向量数据库 + Python ML 框架 + LLM API + ETL 管道,系统复杂、运维沉重、数据在多个系统间流转带来安全和一致性风险。现在,MySQL 9.x 将这些能力逐步内化:向量存储和检索在数据库内完成,RAG 流水线通过 SQL 调用触发,AutoML 让预测模型训练变得像写一条 SQL 一样简单。
这种"数据在哪,智能就在哪"的设计哲学,不仅降低了技术门槛,更重要的是消除了数据移动的摩擦。对于大多数企业来说,数据已经在 MySQL 中,现在智能也可以直接在 MySQL 中运行,不需要重新架构整个数据平台。
当然,MySQL 的 AI 能力不是万能的。它定位为"结构化业务数据 + 轻量 AI 增强"的场景,对于超大规模向量检索或复杂的多模态 AI 流水线,仍然需要专用工具和平台。明智的做法是根据实际需求选择合适的工具组合,让 MySQL 做它最擅长的事——可靠地存储和管理你的核心业务数据,同时以最低的成本为这些数据赋予语义理解能力。