首页 / 文章 / Neo4j vs pgvector vs MongoDB vs Milvus vs Pinecone vs FAISS:完整向量数据库指南
← 返回
AI技术

Neo4j vs pgvector vs MongoDB vs Milvus vs Pinecone vs FAISS:完整向量数据库指南

✍️ zhirenhun 📅 2026/7/27 👁 116 阅读 ⏱ 35 分钟
Neo4j vs pgvector vs MongoDB vs Milvus vs Pinecone vs FAISS:完整向量数据库指南

Neo4j vs pgvector vs MongoDB vs Milvus vs Pinecone vs FAISS:完整向量数据库指南

每个在2026年构建RAG系统的团队都会面临同样的决策树。你需要一个向量存储。你打开对比指南。Pinecone说它最快。Milvus说它能扩展到十亿级别。pgvector说你已经拥有PostgreSQL。Neo4j说关系很重要。FAISS什么也不说,因为它是一个不做声明的库。

它们都没有错。但所有的答案都不完整。

正确的向量存储只由一件事决定,且仅由一件事决定:用户实际提出的查询形态。不是你当前的查询分布——而是你完整的查询分布,包括那些你还没有写好答案的困难查询。

这是一份完整的指南,介绍每个选项实际能做什么,每个选项真正擅长的领域,以及——关键的是——为什么Neo4j在这个列表中的架构位置与其他所有选项根本不同。


目录

  • 每个向量数据库实际在做什么
  • FAISS:开创一切的库
  • pgvector:PostgreSQL扩展
  • MongoDB Atlas Vector Search:文档数据库方法
  • Milvus:专为十亿级规模设计
  • Pinecone:全托管标准
  • Neo4j:根本不同的选项
  • 你可以信任的基准测试数据
  • 查询形态决策框架
  • 生产环境中使用的混合模式
  • 决策矩阵

1. 每个向量数据库实际在做什么

在比较选项之前,必须明确其机制——因为许多比较混淆了不同系统的优化目标。

所有向量数据库核心都做一件事:给定一个查询向量,通过某种距离度量(余弦相似度、点积或欧几里得距离)找出与其最接近的存储向量。向量代表含义。向量空间中的邻近意味着语义相似。这实现了语义搜索:你对用户问题做嵌入,检索与该嵌入最接近的存储块,并将其传递给模型。

系统之间的差异不在于它们计算什么——而是在于它们在大规模下计算的效率如何、在向量之外还存储哪些附加数据、支持哪些超出纯粹相似性的查询模式,以及需要什么样的运维模型。

FAISS是一个库——它在内存中计算,没有持久化、没有元数据、没有服务基础设施。此列表中的其他所有选项都是数据库——它们增加了持久化、API服务、元数据过滤和运维管理。pgvector、MongoDB和Neo4j是添加到现有数据库中的向量能力。Milvus和Pinecone是专为向量工作负载构建的数据库。

Neo4j是唯一将向量搜索与原生属性图结合起来的选项——这使得它在架构上与其他所有选项截然不同,对于特定查询类型具有重要意义。


2. FAISS:开创一切的库

Facebook AI Research Similarity Search(FAISS)于2017年发布,至今仍是近似最近邻搜索的参考实现。上述许多数据库在核心ANN计算中都使用它作为底层引擎。

FAISS不是一个数据库。它没有持久化、没有API服务器、没有元数据存储、没有访问控制、没有多租户。它是一个高度优化的C++库,带有Python绑定,可以执行极快的内存内相似性搜索。

在GPU加速下的原始向量搜索速度方面,FAISS在纯相似性搜索基准测试中超越了包括Milvus在内的完整向量数据库。当消除所有数据库开销时,计算速度更快。

FAISS擅长的领域:研究环境、离线批处理、将此功能嵌入到自定义应用中(由你控制所有周边基础设施),以及在进行基准测试时了解在添加数据库开销之前ANN计算的天花板。

FAISS失败的地方:任何需要跨重启持久化、元数据过滤、并发访问、向量索引更新或监控的生产应用。在生产中使用FAISS意味着要自己构建所有这些功能。这样做过一次的团队很少会做第二次。

诚实的结论:如果你是研究人员,或者你在构建包装它的基础设施,那么FAISS是正确的选择。如果你正在构建一个应用,并希望在几周内(而不是几个月内)投入运营,那么它是错误的选择。


3. pgvector:PostgreSQL扩展

pgvector向PostgreSQL添加了向量存储和ANN搜索。你将向量作为列类型与常规关系数据一起存储。你可以用SQL查询它们。你可以在与关系型JOIN相同的事务中获取向量搜索结果。

这是pgvector真正的显著优势:你消除了一个独立的基础设施组件。你的产品数据、用户数据、文档元数据和嵌入都存放在一个数据库中。需要按用户权限、文档日期和语义相似性进行过滤的查询可以在一个SQL语句中执行,而不需要在向量数据库和关系数据库之间来回往返。

pgvectorscale——Timescale在pgvector之上的扩展——在5000万个向量上实现了每秒471次查询,召回率达到99%。这是一个严肃的生产数据。对于大多数不超过5000万到1亿个向量的应用,使用pgvectorscale的pgvector是一个完全可行的生产选择。

局限性在于架构层面而非运维层面。PostgreSQL的查询规划器并非为ANN搜索而设计。在超过数亿向量的情况下,专用向量数据库中专门构建的ANN索引在召回率和吞吐量上优于pgvector。使得pgvector在小规模下具有吸引力的运维简单性,在更大规模下会变成瓶颈。

pgvector擅长的领域:已经运行在PostgreSQL上的应用、低于5000万个向量的RAG系统、任何在单个查询中将向量结果与关系数据进行JOIN在架构上很重要的用例,以及正确优先考虑运维简单性而非最大理论吞吐量的团队。

pgvector失败的地方:超过1亿个向量的场景、需要独立于关系数据库对向量索引进行水平扩展的应用,以及向量搜索是主要查询模式而非更广泛关系应用中的一项功能的工作负载。

诚实的结论:对于大多数几百万个向量以下的RAG工作负载,在你自己的Postgres中使用pgvector是最强的选择,因为嵌入、文档和元数据都位于一个数据库中,你可以用SQL JOIN查询它们。规模上限是真实存在的,但大多数应用永远不会达到它。


4. MongoDB Atlas Vector Search:文档数据库方法

MongoDB Atlas Vector Search将向量索引和ANN搜索添加到MongoDB的文档模型中。与pgvector类似,其价值主张在于共置:你的文档数据和嵌入位于同一个数据库中,可以一起查询。

对于某些数据形态,MongoDB的文档模型相比pgvector的关系模型具有真正的优势。带有嵌套结构、数组和可变模式的JSON文档在MongoDB中很自然,而在PostgreSQL中则需要进行模式上的变通。对于构建在文档数据上的应用——内容管理系统、产品目录、客户档案——将嵌入与文档一起存储在MongoDB中在架构上比在PostgreSQL中更清晰。

Atlas Vector Search的实现支持HNSW索引、近似最近邻搜索,以及将向量相似性与MongoDB现有查询运算符结合起来的混合搜索。你可以按任何文档字段与向量搜索一起进行过滤。

MongoDB擅长的领域:已经运行在MongoDB上的应用、灵活的文档模式真正有价值且文档密集型的用例,以及希望将向量搜索作为现有文档数据库的集成功能而不是独立服务的团队。

MongoDB的失败之处

纯向量工作负载无法受益于文档模型,需要在大规模场景下实现极致ANN性能的应用,以及Atlas运维开销无法被文档模型优势合理化的使用场景。

客观结论

如果你已经在使用MongoDB并希望在不增加新基础设施的情况下添加语义搜索,MongoDB Atlas Vector Search是正确的选择。如果你尚未使用MongoDB,或者主要工作负载是纯向量相似度搜索而不需要文档模型背景,那么它不是正确的选择。


5. Milvus:专为十亿级规模打造

Milvus是从零开始为大规模场景构建的开源向量数据库。如果说pgvector是在关系数据库上添加向量能力,那么Milvus则是专为海量存储、索引和查询嵌入向量而设计,兼具低延迟特性。

Milvus支持多种索引类型——HNSW适用于延迟优化型工作负载,IVF适用于内存受限环境,DiskANN适用于内存不足时使用SSD存储,SCANN适用于GPU加速型工作负载。这种索引类型的灵活性是Milvus相对于仅支持HNSW的系统的主要技术优势。

在十亿级向量规模下,Milvus仍然是最强的开源选择。它专为水平扩展而设计——增加节点即可实现吞吐量线性扩展。但运维复杂性是真实存在的:Milvus需要多个组件,包括用于协调的etcd、用于存储的MinIO以及Milvus服务器本身。这比pgvector或Pinecone所需的基础设施更多。

Zilliz Cloud是Milvus的托管版本,适用于希望获得十亿级性能但又不愿承担运维开销的团队。

Milvus的优势领域

大规模图像和视频嵌入搜索、多模态向量工作负载、真正运行在数亿到数十亿级向量规模的应用、以及具备运维分布式向量数据库所需基础设施工程能力的团队。

Milvus的失败之处

没有运维分布式基础设施能力的团队、低于5000万向量规模的应用(此时pgvector的简洁性更具优势)、以及需要向量与丰富关系型或图结构元数据结合的使用场景。

客观结论

当规模是主要约束条件且你拥有足够的工程资源来运维它时,Milvus是正确的选择。对于大多数不会达到十亿级规模且低估了运维开销的团队来说,Milvus不是一个合适的起点。


6. Pinecone:完全托管的行业标准

Pinecone是全面托管、闭源的向量数据库,专为希望获得生产级向量搜索但无需运维任何基础设施的团队而设计。创建索引、通过API插入向量、通过API查询——Pinecone负责处理扩展、复制、故障转移和性能优化。

Pinecone支持混合搜索——将密集向量相似度与稀疏关键词分数相结合——并支持元数据过滤。在托管基础设施上实现十亿级规模下低于100毫秒的延迟是其核心价值主张。对于那些首要目标是交付可用产品而非最大化性能或控制基础设施的团队来说,Pinecone是缩短产品上线时间的最佳选择。

局限性是托管模式的另一面:无法自行托管Pinecone,无法检查或控制底层基础设施,定价随使用量增长,在高规模下可能变得显著。禁止云存储的数据驻留要求也不适合Pinecone。

Pinecone的优势领域

追求最大托管简洁性的团队、向量搜索是主要工作负载而关系型或图数据为次要的应用、数据驻留要求与Pinecone可用区域兼容的组织。

Pinecone的失败之处

有数据驻留、气隙或本地部署要求的组织。对高查询量场景下成本敏感的团队。需要向量搜索与关系型或图数据紧密耦合的应用。

客观结论

对于纯向量搜索用例,Pinecone是通往生产环境的最快路径。代价是规模扩大后的成本和基础设施控制权的丧失。对于需要在数周内交付RAG产品的初创公司,Pinecone通常是正确选择。对于有数据驻留要求或对大规模成本敏感的企业,托管带来的简洁性不值得所付出的约束。


7. Neo4j:根本性不同的选择

Neo4j并不与这份列表中的其他数据库在同一维度上竞争。其他所有选项都针对一个主要操作进行了优化:给定查询向量,找到最近的存储向量。而Neo4j将向量搜索添加到了一个完全不同的核心设计原则之上:实体间关系的高效存储与遍历。

这不是一个小区别。这是决定Neo4j何时正确、何时错误的架构差异——精确理解这一点,是你能从整个对比中获得的最有价值的内容。

Neo4j的实际定位

Neo4j是一个原生属性图数据库。数据以节点(实体)、关系(实体之间的连接)和属性(节点和关系上的特征)的形式存储。查询使用Cypher编写,这是一种声明式图查询语言,专为遍历而设计:从这些节点开始,沿这些关系类型,按这些属性过滤,返回这些结果。

2025年,Neo4j添加了原生向量索引——能够将嵌入向量作为属性存储在节点上,并使用ANN进行搜索。这一添加使Neo4j成为一个真正的混合系统:它可以像列表中的其他数据库一样执行纯向量相似度搜索,还可以从任何检索到的节点出发,通过明确的关系路径遍历图来查找相关实体。

让Neo4j与众不同的能力

到2026年初,从业者社区已基本达成一种模式:向量用于语义入口检索,图用于关系深度。

在MultiHopRAG基准测试中,GraphRAG相较于强向量存储基线提升了11个百分点的召回率。基于Neo4j构建的Zep时序知识图谱在LongMemEval上得分为63.8%,而Mem0为49.0%——这15个百分点的差距完全由基于图的时间推理驱动。在Deep Memory Retrieval基准测试中,Zep达到94.8%,MemGPT为93.4%。

这些数字与向量搜索速度无关。它们关乎回答需要遍历关系的问题的质量——无论ANN计算速度多快,纯向量相似度搜索都无法正确回答这类问题。

Neo4j是拥有成熟Cypher工具链的属性图工作负载的默认选择。如果你的企业AI管道仍依赖对扁平分块向量进行简单的余弦相似度计算,那么你在回答需要关系推理的问题时,会输出容易产生幻觉的答案。

Neo4j的真正优势

多跳推理查询。"哪些客户购买了受港口中断影响的供应商的产品,且该中断与Q3物流延迟相关?"这个查询需要遍历:客户→购买关系→产品→供应商关系→供应商→中断关系→事件→时间线关系→延迟。向量数据库会找到与该查询相似的片段。Neo4j则遍历实际路径并返回结构正确的答案。

跨文档实体消歧。作为科技公司的"Apple"与作为水果的"Apple"需要基于图上下文进行消歧——在文档图中"Apple"附近出现哪些实体,哪些关系类型连接它们,它们具有哪些属性。仅靠向量相似度无法可靠解决这个问题。通过实体-关系结构的图遍历可以做到。

代理记忆中的时间推理。需要记住的不只是发生了什么,还包括事件之间的时间顺序和因果关系的代理,会从图结构记忆中受益。Neo4j Labs 的 agent-memory 包将图同时用作对话存储和知识图谱——每一轮对话、每个提取的实体、每个推理步骤都作为节点存储,通过 Cypher 遍历结合节点嵌入上的向量相似度进行检索。

合规与审计链。"上个季度哪些决策是由哪些代理基于来自哪些源系统的哪些数据做出的,并且这些决策涉及哪些监管要求?"这是一个溯源遍历查询——沿着因果链从决策向后追溯推理步骤直至源数据。图遍历原生地处理了这种查询。没有向量数据库能做到这一点。

基于知识图谱的 RAG。将知识图谱和向量数据库视为独立基础设施会引入双重查询延迟。Neo4j 的混合方法让向量搜索和图遍历针对同一数据在同一查询中执行——消除了其他所有混合架构所需的向量数据库与独立图数据库之间的往返。

Neo4j 的劣势

在单跳事实检索上——Natural Questions 基准——GraphRAG 比普通 RAG 性能低 13.4%。Neo4j 针对关系深度优化,而非百科式查找。对于需要实时知识的时间敏感型查询,由于实体表示过时,图 RAG 的准确率下降高达 16.6%。在同等语料库规模下,图检索的平均延迟比向量搜索高 2.3 倍。

Neo4j 有学习曲线。Cypher 是一种设计良好的查询语言,但仍需学习。图数据建模——决定哪些实体成为节点、哪些成为属性、哪些成为关系类型——需要设计决策,而平面向量存储则不需要。一个开发者社区的评估:"学习 Neo4j 很难,但值得"——并且只有当你的用例需要图能力时才值得。

诚实的结论:当你的查询需要多跳推理、实体消歧、时间关系跟踪、溯源遍历或任何需要理解实体如何连接(而不仅仅是哪些块语义相似)的能力时,Neo4j 是正确的选择。对于答案存在于单个文档且实体间关系不相关的纯语义搜索用例,它是错误的选择。


8. 你可以信赖的基准数据

以下基准结果来自独立验证的来源,而非厂商基准:

大规模召回率——VectorDBBench 结果:

  • pgvectorscale 在 5000 万向量时:471 QPS,召回率 99%。在此规模下与专用系统竞争。
  • 专用数据库(Milvus、Qdrant、Weaviate)在超过 5000 万至 1 亿向量时,在同等硬件上,吞吐量和召回率均优于 PostgreSQL 扩展。

混合搜索优势:

  • Weaviate 的混合搜索将 BM25 与稠密向量结合,同时处理而非作为独立查询,在 2026 年基准评估中展示了最强的混合搜索性能。
  • 混合检索通常比单方法向量搜索提高 15% 到 30% 的召回率——这一发现已在多个独立基准测试中得到验证。

Neo4j 在多跳任务上的图优势:

  • MultiHopRAG 基准:图增强检索比纯向量存储基线召回率提高 11 个百分点。
  • LongMemEval:Neo4j 支持的时间知识图谱 63.8% 对比纯向量方法 49.0%——相差 14.8 个百分点。

基准总结:图检索的价值随查询复杂度的增加而提升。在简单的单跳问题上,纯向量搜索更快更准确。在多跳和关系型问题上,图增强检索以显著的差距胜出。

重要的基准说明:

FAISS 在原生 ANN 速度上通过 GPU 加速优于完整向量数据库。这个数据对大多数生产系统无关紧要,因为生产系统需要 FAISS 不提供的所有功能:持久化、服务基础设施、访问控制、元数据过滤和运维管理。


9. 查询形状决策框架

你的向量数据库选择应由查询分布驱动,而非基准数字或厂商声明。

你的查询主要是单跳语义查找:

"我们在 X 方面的政策是什么?""查找关于 Y 的文档。""哪些文章讨论了 Z?"

答案在一个或几个文档中。相似度是正确的检索机制。

  • 如果向量数低于 5000 万且你重视运维简洁性,请使用 pgvector。
  • 如果你想要完全托管且零基础设施,请使用 Pinecone。
  • 如果在亿级以上规模且有基础设施能力,请使用 Milvus。
  • 不要使用 Neo4j——图增加了成本和延迟,毫无益处。

你的查询需要将向量结果与结构化数据结合:

"查找过去 90 天内来自企业级客户、创建的关于 X 的文档。"

语义相似性必不可少但不够——结构化过滤器同样重要。

  • 使用 pgvector——SQL 连接是自然解决方案。
  • 如果你的数据是文档结构的,请使用 MongoDB Atlas。
  • 不要在规模下为复杂过滤模式使用 Pinecone。

你的查询需要多跳推理:

"导致 Q3 事件的事件之间有什么关系?"
"哪些实体通过供应链连接到受影响的供应商?"
"代理上周二做了什么决定,该决定依赖于哪些数据?"

使用 Neo4j。不是因为它有最好的向量搜索——它没有。而是因为此列表中没有其他数据库能遍历你查询所需的关系图。将 Qdrant 用于快速向量入口点检索,结合 Neo4j 用于图遍历,是 Qdrant 自身文档中已验证的模式。

你的查询在十亿级以上规模且对时间敏感:

大规模下的实时推荐、图像搜索、视频检索。

  • 使用 Milvus 搭配 DiskANN 以支持 SSD 友好的十亿级存储。
  • 如果完全托管可接受且成本允许,使用 Pinecone。

10. 生产环境中使用的混合模式

到 2026 年初,从业者社区已大致收敛于一种模式,本比较已阐明:向量用于语义入口点检索,图用于关系深度。

避免双重查询延迟的双系统架构将 Neo4j 同时用作向量存储和图数据库。向量搜索找到入口节点。Cypher 遍历从这些入口节点沿关系路径收集相关上下文。两个操作针对同一数据在同一查询中执行。

最大化纯向量性能的双系统架构使用 Qdrant 或 Milvus 进行快速 ANN 检索,并在检索结果上使用 Neo4j 进行图遍历。Qdrant 自身文档在"使用 Qdrant 和 Neo4j 的 GraphRAG"教程中描述了这一模式。

大多数应用的单系统架构在规模合适且关系共存优势真实存在时使用 pgvector。当托管简洁性压倒其他一切时使用 Pinecone。当规模是主要约束时使用 Milvus。

几乎所有人的应用在成熟过程中都会演变为的架构:从向量数据库加排序器开始。当出现多跳问题、实体消歧困难或严格的合规要求时,再添加知识图谱或 GraphRAG 风格的索引。这是 FutureAGI、BuildMVPFast 和从业者社区在多个独立来源中记录的演进路径。


11. 决策矩阵

| 维度 | FAISS | pgvector | MongoDB | Milvus | Pinecone | Neo4j |
|------|-------|----------|---------|--------|----------|-------|
| 基础设施 | 库 | Postgres 扩展 | 托管/自托管 | 自托/托管 | 完全托管 | 自托/托管 |

扩展上限
内存受限
5000万-1亿
1亿以上
10亿以上
10亿以上
关系深度

多跳查询





是 — 原生支持

图遍历





是 — 原生支持

混合搜索

部分支持



运维复杂度
低(无需运维)




最佳适用场景
研究
简单RAG
文档类工作负载
十亿级规模
零运维
关系型AI

应避免场景
生产环境
超过1亿向量
纯向量需求
小规模
数据驻留要求
简单查询


总结思考

2026年的向量数据库格局已经成熟,以至于"哪个最好?"这个问题有了清晰的答案:没有通用的最佳方案。

FAISS 最适合内存内的研究场景。pgvector 最适合在5000万向量以下的共置简单场景。MongoDB 最适合文档原生的应用。Milvus 最适合十亿级规模。Pinecone 最适合零运维的托管部署。Neo4j 最适合关系推理、多跳查询和图结构知识。

那些做出正确选择的团队,并非找到了最佳基准测试结果的团队,而是准确刻画了自身查询分布的团队——具体来说,就是用户查询中需要关系推理与纯语义相似性查询的比例,并选择了与之匹配的架构。

如果你的查询大多是单跳语义查找:任何优秀的向量数据库都适用。决策的关键在于运维和成本因素。

如果相当一部分查询需要理解实体间的连接方式:Neo4j 并非多个选项之一,而是唯一能够正确处理这些查询的选项。其他方案会返回流畅但结构上错误的答案。

了解你的查询,然后选择你的存储。


研究来源

  • FutureAGI — 2026年的向量数据库与知识图谱在RAG中的应用。2026年5月14日。Neo4j作为属性图工作负载的默认选择,融合混合模式。
  • AgentMarketCap — 2026年图RAG与向量RAG在智能体记忆中的比较。2026年4月7日。MultiHopRAG提升11个百分点。LongMemEval 63.8% vs 49.0%。DMR 94.8% vs 93.4%。延迟开销2.3倍。单跳性能下降13.4%。
  • MarkTechPost — 2026年最佳向量数据库:定价、规模限制与架构权衡。2026年5月10日。Weaviate混合搜索架构。定价分析。
  • Firecrawl — 2026年最佳向量数据库:完整对比指南。2026年5月27日。pgvectorscale在5000万向量上以99%召回率达到471 QPS。HNSW架构。
  • Encore — 2026年最佳向量数据库:完整对比指南。2026年3月9日。pgvector的SQL连接优势。扩展上限分析。
  • BuildMVPFast — 图RAG与向量RAG:2026年知识图谱AI指南。2026年3月18日。LazyGraphRAG成本分析。Neo4j LangChain集成。
  • DEV Community — 停止使用原始向量搜索:用Spring AI和Neo4j实现图RAG。2026年5月21日。双查询延迟问题。混合流水线架构。
  • Qdrant — 使用Qdrant和Neo4j的图RAG。官方文档。双系统混合模式。召回率与精确度提升。
  • AltexSoft — 如何选择正确的向量数据库。2026年3月31日。FAISS GPU加速基准测试。数据库与库对比。
  • LakeFS — 2026年17个最佳向量数据库。2026年1月21日。开源格局。Milvus十亿级定位。
  • Medium — AI开发者向量数据库对比。2025年5月。FAISS、Pinecone、Weaviate、Milvus、Neo4j功能对比。
  • Neo4j博客 — 知识图谱与向量RAG:基准测试与优化杠杆。2024年6月。图与向量系统的互补性。
  • Educative — Neo4j中知识图谱的向量搜索。2025年2月。基于节点嵌入的Cypher遍历与向量相似度。

原文:https://dev.to/nikhil_ramank_152ca48266/neo4j-vs-pgvector-vs-mongodb-vs-milvus-vs-pinecone-vs-faiss-the-complete-vector-database-guide-1o7d

——

🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

neo4j ai vectordatabase rag
← 上一篇
Claude Code 生产环境成本控制:Token 预算、缓存策略以及计费仪表盘隐藏的信息
下一篇 →
我原本计划了10个LLM评估实验,但只跑了1个——而这1个就够了。

📌 相关推荐

停止相信仅文本代理排行榜:来自 Cua-Bench 和 Factorio 的教训
2026/8/26
Agent Memory 有两种不同含义,回答引擎给出的却是错误的那一种
2026/8/26
LLM的止境:AI辅助VAPT流水线的确定性评分
2026/8/22
← 返回文章列表