广告
您当前的位置: 首页 >  技术 >  AI探索

向量数据库零基础入门:从 MySQL 视角轻松读懂向量检索

作者:admin 时间:2026-06-24 阅读数:5人阅读

作为一名熟悉传统关系型数据库(如 MySQL)的开发者,当你第一次接触到“向量数据库(Vector Database)”、“嵌入(Embedding)”、“余弦相似度”这些概念时,可能会觉得有些抽象和陌生。

其实,向量数据库的底层逻辑和传统数据库有许多相通之处。本文将通过与 MySQL 的对比,带你轻松跨越概念门槛,秒懂向量数据库的核心原理。


一、 核心概念对照表

在正式展开前,我们可以先通过一张概念映射表,将向量数据库的新概念与 MySQL 的已知概念建立连接:

概念维度 传统关系型数据库 (以 MySQL 为例) 向量数据库 (Vector DB)
数据容器 表 (Table) 集合 (Collection)
基本数据单元 行 (Row) 实体 (Entity)
主键 自增 ID / UUID (Primary Key) 唯一 ID (ID)
数据字段 列 (Column) 属性/载荷 (Payload / Metadata)
核心索引 B+ Tree 索引 / 哈希索引 HNSW / IVF (近似最近邻索引)
检索方式 精确匹配 (如 WHERE status = 1) 相似度检索 (寻找距离最近的向量)
查询结果 满足条件的确定性记录 按相似度降序排列的 Top-K 候选集

二、 核心概念深度通俗解读

1. 什么是向量(Vector)与嵌入(Embedding)?

  • MySQL 中的数据:在 MySQL 中,我们用字段存储特征。比如一个商品,我们用 color="Red", price=99, category="Shoes" 来表示。
  • 向量数据库中的数据:在 AI 时代,我们希望计算机理解商品的“语义”。比如,一件“红色的运动鞋”和“粉红色的跑步鞋”在字面上不一样,但语义高度相似。

为了让计算机读懂这种语义,我们会使用 Embedding 模型(如 OpenAI 的 text-embedding-3)把文本或图片转化为一串浮点数数组(如 [0.12, -0.43, 0.98, ... 共1536维])。这一串浮点数就是向量(Vector)

  • 通俗比喻:向量就像是多维空间中的“GPS经纬度”。普通地图只有 X 和 Y 两个维度(经度和纬度),而向量空间有上千个维度。空间中距离越近的两个点,代表它们的语义越相似。

2. 向量检索 vs. SQL 查询

  • MySQL 的查询(精确匹配)sql SELECT * FROM products WHERE name LIKE '%运动鞋%' AND price < 100; MySQL 必须找到完全包含“运动鞋”这三个字,且价格小于100的行。这是一种黑白分明的精确过滤。
  • 向量数据库的查询(相似度检索): 向量数据库不进行字面匹配。当用户搜索“跑鞋”时,系统先将“跑鞋”转为向量 $V_{query}$,然后在数据库中寻找距离 $V_{query}$ 最近的那些商品向量。

  • 查询结果:返回的不是“是或否”,而是“这个商品与您的输入有 92% 的相似度,那个商品有 88% 的相似度”,并按照相似度高低返回前 K 个结果(即 Top-K 检索)。

3. B+ 树索引 vs. 向量索引 (HNSW / IVF)

  • MySQL 的索引 (B+ Tree): MySQL 的 B+ 树索引非常擅长一维数据的排序和快速查找。例如,找 id = 10age > 18。它可以通过不断二分,以 $O(\log N)$ 的复杂度快速锁定目标。
  • 向量数据库的索引 (以 HNSW 为例): 高维空间(如 1536 维)是无法用 B+ 树排序的(这被称为“维度灾难”)。如果在海量向量中一个一个去计算距离,计算量会爆炸(相当于全表扫描 SecScan)。

因此,向量数据库采用了近似最近邻(ANN,Approximate Nearest Neighbor)算法: * HNSW (分层导航小世界):把高维向量构建成像“社交网络”一样的图结构。检索时,先在顶层“高速路”快速定位大体区域,再在底层“小路”上精细查找,从而在毫秒级内找到最相似的向量。 * IVF (倒排文件索引):将空间划分为若干个聚类(类似于把数据分类装进不同的桶),查询时先定位到最相邻的几个桶,只在桶内进行计算,大大减少计算量。


三、 代码实战对比:从 SQL 到 Vector SDK

让我们通过伪代码来看看,这两种数据库在开发层面的具体差异。

1. 插入数据

  • MySQL 方式python # 插入一条商品记录 cursor.execute( "INSERT INTO products (id, name, price) VALUES (1, '耐克红运动鞋', 599)" )
  • 向量数据库 方式: ```python # 1. 将文本转化为高维向量 vector = embedding_model.embed("耐克红运动鞋") # 返回 [0.12, -0.45, ...]

# 2. 写入向量数据库(包含向量本身,以及作为 Payload 的元数据) client.collection("products").insert( entity_id=1, vector=vector, payload={"name": "耐克红运动鞋", "price": 599} ) ```

2. 查询数据

  • MySQL 方式python # 严格匹配字面量 cursor.execute("SELECT * FROM products WHERE name LIKE '%红鞋%'") results = cursor.fetchall()
  • 向量数据库 方式: ```python # 1. 将用户的查询词转化为向量 query_vector = embedding_model.embed("红色的鞋子")

# 2. 向量数据库搜索,寻找距离最近的前 3 个结果 results = client.collection("products").search( vector=query_vector, limit=3, # 也可以带上关系型过滤条件 filter="price < 800" ) ``` 尽管用户输入的词是“红色的鞋子”,并不完全匹配“耐克红运动鞋”的字面,但由于它们在语义空间非常接近,向量数据库依然能精准地把“耐克红运动鞋”作为高相似度结果返回。


四、 总结与学习建议

  1. 向量数据库不能完全替代 MySQL:向量数据库是为了处理高维非结构化语义检索而生的。它在事务性(ACID)、复杂关联查询(JOIN)等方面不如传统关系型数据库。
  2. 混合检索 (Hybrid Search) 是主流:在当前的 AI 应用(如 RAG 知识库)中,我们通常将二者结合使用。将业务元数据作为 Payload 存入向量数据库,在检索向量的同时进行标量过滤(例如:只检索 user_id = 10086 的文档向量)。

希望这篇对照介绍能帮助你理清向量数据库的基本概念。当你下次在 AI 项目中需要存储知识库、实现语义搜索时,就可以自信地挑起一款向量数据库开始你的 AI 探索之旅了!

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。

评论交流 (0)

正在加载评论...
头像

admin

当你还撑不起你的梦想时,就要去奋斗。如果缘分安排我们相遇,请不要让她擦肩和过。我们一起奋斗!

微信