MySQL和PostgreSQL的数据库主键索引都是B+树吗?

数据库索引原理与SQL优化:从B+树到索引失效场景 当业务数据量突破千万级,一条SQL跑几十秒甚至拖垮数据库的情况并不罕见,核心原因往往是查询走了全表扫描。索引的本质,就是将原始数据中的定位信息抽取出来,基于B+树或哈希等结构重新组织,让查询成本从O(n)降到接近O(log n),为高并发业务提供稳定快速的响应路径。在真实工程实践中,SQL优化与索引设计相辅相成:通过EXPLAIN分析执行计划、关注索引下推等经典优化手段,并规避函数操作、隐式类型转换、违反最左前缀等索引失效场景,才能让数据库在读写之间找到最佳平衡。从单列索引、联合索引到聚簇索引,再到与ES、 阅读详情

这是一个非常好的问题,答案是:基本上是的,但两者在实现细节和设计哲学上有重要区别。

简单来说:

  • MySQL(默认的InnoDB存储引擎):主键索引是 B+Tree,并且是 聚集索引(Clustered Index)。
  • PostgreSQL:主键索引默认也是基于 B-Tree 的,但 PostgreSQL 使用的是 堆表(Heap Table) 结构。

下面我们来详细解释这两者的区别和为什么都倾向于使用这种数据结构。

核心共同点:为什么都是 B-Tree(或其变种)?

无论是 MySQL 的 B+Tree 还是 PostgreSQL 的 B-Tree,它们都是一种 平衡多路搜索树。这种数据结构非常适合作为数据库索引,因为它具有以下优点:

  1. 查询效率高:查找、插入、删除、更新的时间复杂度都是 O(log n),n 是记录数。这意味着即使表中有数十亿条记录,只需很少的磁盘 I/O(树的深度很低)就能找到数据。
  2. 适合磁盘存储:树的一个节点通常被设计为与一个磁盘页(Page)或块(Block)的大小(如 4KB, 8KB, 16KB)相匹配。每次磁盘 I/O 可以读取一个完整的节点,极大减少了磁盘访问次数。
  3. 范围查询高效:所有数据项都按顺序存储在叶子节点上,这对于 WHERE id BETWEEN 10 AND 100 这类范围查询非常高效,只需要找到起始点,然后顺序遍历叶子节点即可。

MySQL (InnoDB) 的 B+Tree 实现

  1. 索引类型:B+Tree
  2. 表结构:聚集索引(Clustered Index)

这是最关键的区别。在 InnoDB 中:

  • 表数据本身就存储在主键索引的 B+Tree 的叶子节点上。换句话说,叶子节点不仅包含了主键值,还包含了该行所有其他列的数据(除了 TEXT/BLOB 等可能被溢出存储的类型)。
  • 因此,每个表必须有且只有一个聚集索引。如果你定义了主键(PRIMARY KEY),那么主键索引就是这个聚集索引。如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替,如果也没有,则会隐式创建一个隐藏的聚簇索引。
  • 二级索引(Secondary Index) 的叶子节点存储的不是行数据,而是该行对应的主键值。这意味着通过二级索引查找数据时,需要先找到主键值,再回到主键索引(聚簇索引)树中查找完整的行数据。这个过程称为 回表(Bookmark Lookup)。

优点:

  • 对于主键的点查和范围查询速度极快,因为数据就在同一棵树上。
  • 数据按主键顺序存储,对于主键排序的查询效率高。

缺点:

  • 如果主键值不是顺序增长的(例如使用 UUID),插入新数据可能导致页分裂,影响写入性能并产生碎片。
  • 二级索引查询需要两次索引查找(回表),可能会慢一些。

PostgreSQL 的 B-Tree 实现

  1. 索引类型:B-Tree (PostgreSQL 的官方文档一直称之为 B-Tree,但其现代实现与经典的 B-Tree 更接近,与 B+Tree 的思想类似,叶子节点也包含所有数据项并按顺序链接,但具体实现是它自己的优化版本。我们可以近似地将其核心原理理解为 B+Tree。)
  2. 表结构:堆表(Heap Table)

这是与 MySQL 最根本的不同。在 PostgreSQL 中:

  • 表数据以一种堆(Heap) 的形式存储。所谓“堆”,就是一种无序的数据结构,行数据写入时只需找到空闲空间存放即可,并不强制按主键顺序存储。
  • 主键索引和其他二级索引都是独立的 B-Tree 结构。这些索引的叶子节点不存储完整的行数据,而是存储一个指向堆表中该行物理位置(称为 TID(Tuple ID),由页面号和页内偏移量组成)的指针。
  • 当通过索引查询时,PostgreSQL 先在索引树中找到对应的 TID,然后再根据这个 TID 指针去堆数据表中读取真正的行数据。

优点:

  • 表数据独立于索引,对主键的插入顺序不敏感,减少了页分裂问题。
  • 所有索引在结构上是平等的,二级索引查询不需要像 MySQL 那样“回表”到主键索引,而是直接通过 TID 访问数据堆。(虽然仍然是两次查找,但路径不同)。
  • 支持多版本并发控制(MVCC) 的实现更方便,因为同一行数据的多个版本可以共存于堆中,索引的 TID 可以指向不同的版本。

缺点:

  • 由于数据存储无序,全表扫描可能不如按主键顺序存储的聚集索引高效。
  • 索引查询总是需要额外的跳转(通过 TID),理论上比直接从索引叶子节点取数据多一次随机 I/O(但 PostgreSQL 有优化,如仅索引扫描)。

总结对比

特性MySQL (InnoDB)PostgreSQL
索引结构B+TreeB-Tree (类 B+Tree 实现)
表组织方式聚集索引(Clustered Index)堆表(Heap Table)
主键索引叶子节点内容完整的行数据指向堆表中行位置的指针(TID)
二级索引叶子节点内容主键值指向堆表中行位置的指针(TID)
通过主键查询一次查找,直接获取数据一次索引查找 + 一次堆表访问
通过二级索引查询两次索引查找(回表)一次索引查找 + 一次堆表访问
数据存储顺序按主键顺序存储按插入顺序存储(实际取决于空闲空间)

扩展:PostgreSQL 的更多索引类型

值得一提的是,PostgreSQL 以其强大的扩展性著称,它不仅支持 B-Tree 索引,还内置了多种其他索引类型,适用于不同的场景:

  • GIN (Generalized Inverted Index): 用于处理数组、JSONB、全文搜索等“包含”查询。
  • GiST (Generalized Search Tree): 一种允许构建多种搜索策略(如几何图形、范围类型、全文搜索)的通用索引框架。
  • SP-GiST (Space-Partitioned GiST): 适用于非平衡数据结构(如四叉树、k-d 树)的索引。
  • BRIN (Block Range INdexes): 对于非常庞大的、按物理顺序存储的表(如时间序列数据)非常高效,它存储连续数据块的范围摘要。
  • Hash: 仅支持等值查询,通常不如 B-Tree 实用。

而 MySQL 的 InnoDB 目前只支持 B-Tree(实际上是 B+Tree)索引,但它的自适应哈希索引(Adaptive Hash Index)会在内存中自动为热点页构建哈希索引以加速查询。

结论:
两者默认都使用 B-Tree(或其变种 B+Tree)来实现主键索引,因为它们是为磁盘存储设计的数据库的最佳选择之一。最大的区别在于表数据的组织方式:MySQL 使用聚集索引,而 PostgreSQL 使用堆表。 这个根本差异导致了它们在数据存储、索引查询路径和性能特性上的一系列不同。

数据库索引原理与优化实战指南 数据库索引是提升查询性能的核心技术,其本质是通过B+树等数据结构实现快速数据定位。索引通过减少磁盘IO次数显著提高查询效率,例如在千万级数据表中可使查询从秒级降至毫秒级。合理使用主键索引、唯一索引和复合索引能有效优化各类查询场景,但需注意索引会带来写入性能开销。在电商、金融等高并发系统中,索引选择性分析和联合索引设计尤为重要。通过监控工具如EXPLAIN和慢查询日志,可以持续优化索引策略。随着分布式数据库普及,全局索引与分片索引的协同成为新的技术挑战。 阅读详情

相关推荐

PostgreSQL 索引管理

索引是关系型数据库离不开的话题,它是数据库中一种快速查询数据的方法。在 SQL 优化中,创建高性能的索引非常重要,本篇文章将对比 MySQL 介绍 PostgreSQL 的索引管理。

分享既学习 2667

PostgreSQL B+树索引---基本结构

B+树索引—基本概念和特性 基本概念 图1 PostgreSQL中使用的B+树索引结构如上图所示,其中有几个关键点需要说明。 B link Tree PostgreSQL B+树索引的思想来源于lehman和yao的论文《Efficient Locking for Concurrent Operations on B-Trees》,该论文介绍了B+树的一个变种,B link Tree,也叫**B***树。B*树和B+树的主要区别在于B*树的非叶子节点也用双向链表链接。B*树的主要优势在于具备更高的并发

obvious__的博客 5378

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1667

PostgreSQL B+树索引---分裂持久性

B+树索引—分裂持久性 预备知识 《B+树索引—分裂》 《基础模块—表和元组组织方式》 概述 在了解了B+树的分裂流程之后,我们来讨论B+树的持久性,也就是ACID的D。与B+树持久性相关有几个非常重要的问题: 在B+树分裂期间,如果发生系统故障,如何确保系统重启后,B+树依然可用。 B+树完成分离,并且相关事务已经提交。如果系统在B+树落盘之前发生故障,在系统重启后如何对分裂进行恢复。 应对这两个问题的方案就是WAL。所以我们下面来看看在B+树发生分裂时,需要将哪些信息写入XLOG,以确保系统重启后能

obvious__的博客 1234

Arthas实战(3)- CPU使用率高问题排查

Arthas实战(3)- CPU使用率高问题排查

java_liuyuan的博客 1731

电赛经验分享——赛前准备

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。⏩在之前的电赛中取得了省一的成绩,本文对电赛比赛前需要准备什么做一个经验分享。加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!

qq_52608074的博客 7778

PostgreSQL索引篇 | BTree

记录下《PostgreSQL数据库内核分析》书中的BTree索引。PostgreSQL版本为8.4.1 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我)

weixin_63800030的博客 2875

Mind+掌控板实战:5分钟搞定Easy IoT的MQTT通讯(附完整代码)

本文详细介绍了如何利用掌控板和Mind+图形化编程软件,快速实现基于Easy IoT平台的MQTT通讯。通过清晰的步骤讲解和完整的代码示例,指导用户完成从云端配置、Wi-Fi连接到MQTT消息发布与订阅的全过程,帮助初学者轻松构建物联网设备间的双向对话系统。

weixin_29300241的博客 445

PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践

PostgreSQL索引技术全面解析:从B-tree到函数索引 摘要:本文系统梳理了PostgreSQL中各类索引技术的核心特性与适用场景。B-tree作为默认索引支持范围查询和排序,但有单页大小限制;Hash索引仅支持等值查询;BRIN索引通过块范围摘要优化时序数据查询;GIN倒排索引擅长处理全文检索和JSON数据;GiST支持空间搜索和最近邻查询。此外还介绍了函数索引、部分索引、复合索引等高级用法,以及索引扫描优化技术如Index-Only Scan和HOT机制。不同索引类型在查询支持、存储效率和维护成

Wang的专栏 738

华硕ROG枪神双系统实战:Ubuntu安装避坑指南

本文是华硕ROG枪神笔记本安装Ubuntu双系统的详细避坑指南。针对其独特的硬件与BIOS设计,文章核心解决了VMD控制器导致硬盘无法识别、驱动兼容性等关键难题,并提供了从BIOS设置、分区方案到安装后驱动配置与性能调优的一站式解决方案,帮助用户实现稳定的双系统体验。

raspberrypi5的博客 545

基于bootstrap+Java的图书管理系统(任务书)

10] 倪甜弟,周晓波,王相喜.基于JSP图书馆自习室预约系统的设计与实现[J].现代计算机, 2024, 30(9):117-120.DOI:10.3969/j.issn.1007-1423.2024.09.023.[2] 陈明雪,赵勇,周小丽,等.基于Node.js和Bootstrap的图书管理系统设计与研究[J].现代信息科技, 2021, 5(24):4.[9] 杨婷婷.基于VOSviewer的图书馆管理系统研究的可视化分析[J].现代信息科技, 2023, 7(3):123-126.

毕业作品网站 644

面试官:PostgreSQL 为什么不选择 B+ 树索引?

PostgreSQL 索引对 B- 树进行了改造。改造后的索引结构如下图:上图的索引结构中最顶层是元数据页,存储索引根节点页相关信息。内部节点位于根节点下面,只包含键值和指向子页面的指针。叶子页位于最下面一层,存储所有指向实际表数据行(TIDs)的指针。什么是 TID?PostgreSQL 采用堆表存储,数据独立于索引存储在一个无序的结构中。数据行插入时,数据库会找到一个空闲的空间来存放它,并记录一个唯一的物理地址,称为 TID,由页号和行指针组成。

zjj2006的专栏 942

嵌入式PCB电源完整性分析:PDN建模与电流密度优化

电源完整性(PI)是高速数字与混合信号系统稳定运行的基础,其核心在于保障芯片供电网络(PDN)在动态负载下的电压稳定与热安全。PDN分析本质上是通过量化电流密度与电压降两个关键物理量,揭示PCB走线、过孔及平面的载流瓶颈与压降路径。电流密度超标将引发局部温升与可靠性风险,而电压降则直接侵蚀器件供电裕量,导致复位、采样失真等典型故障。借助Altium Designer等工具开展工程级PDN建模,需严格依据电源预算表定义源/负载,并精准配置铜厚、过孔参数及IPC-2152限值,从而实现从原理图到制造工艺的闭环验

weixin_28949937的博客 208

【MySQL篇01】补充:索引体系大总结(数据库原理篇)

索引技术分类与应用概览 索引技术根据数据结构、存储方式和功能特性可分为多种类型。B+树索引是关系型数据库的主流选择,支持高效的点查询和范围查询;哈希索引适用于精确匹配但无法处理范围查询;位图索引适合低基数列的集合操作;全文索引用于文本搜索;空间索引处理地理数据。存储方式上,聚簇索引将数据与索引绑定,而非聚簇索引需回表查询。不同数据库如MySQL、PostgreSQL各有特色实现。合理选择索引类型可显著提升查询性能。

lyh2004_08的博客 766

MicroCap声学仿真介绍(五)-倒相管扬声器系统仿真

实际倒相管的扬声器单体选择、后腔容积、倒相管的直径和长度都是需要精心挑选的,为了便于演示,随意指定了倒相管的长度和直径,现实中还是不能这么随便的。之前介绍了封闭式扬声器的仿真,今天在封闭式扬声器的基础上,再介绍一下倒相管扬声器系统的仿真。

山无忧的博客 1716

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据库索引基础解析

索引是数据库中一种特殊的数据结构,它通过对表中一个或多个列的值进行排序,帮助数据库系统快速定位和访问数据。加速查询:将全表扫描的 O(n) 复杂度降低到 O(log n) 甚至 O(1)。优化排序:避免临时表排序,直接利用索引有序性。提升连接性能:多表关联时,索引能显著减少匹配时间。以电商订单表为例,当用户查询 "2024 年 1 月之后的订单" 时,没有索引需要扫描所有记录,而有索引时只需定位到时间范围对应的索引节点,查询效率提升可达数十倍。

2401_84120325的博客 1235

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据库【索引】

考虑查询频率、选择性、排序需求,通常高选择性列在前,等值列在范围列前。索引会增加写操作成本,占用存储空间,需要平衡读写比例。经常查:某用户、某短时间、某种状态的订单。经常查:某分类、按价格、按销量排序。:索引按定义顺序从左到右匹配。

weixin_45351651的博客 443

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

easy-vibe 数据库原理实战指南:索引、事务与查询优化的完整解析

本文是 Datawhale easy-vibe 项目附录「数据基础」章节的核心技术指南,源自 [数据库原理教程](https://link.gitcode.com/i/b70d5bf7956ad821fb8f9f40140c3974)(项目同时提供[中文版](https://link.gitcode.com/i/0e22e965fd5b32e4c5724d98dc35155e))。文章从「Exce

gitblog_00547的博客 522

初识数据库:从表结构、索引到事务与主流选型

数据库作为信息化系统的核心基础设施,承担着数据存储、高效查询与一致性保障的关键职责。从二维表结构到主键外键约束,从B+树索引到事务的ACID特性,每一个设计都直接决定系统的稳定与性能。MySQL、PostgreSQL等关系型数据库是当前应用最广泛的技术栈,而MongoDB、Redis等非关系型产品则在特定场景发挥优势。随着AI大模型落地,向量数据库为语义检索带来新的可能性。理解表设计、索引优化与事务隔离级别,是开发者走向数据库工程实践的必经之路。本文从零搭建数据库认知框架,串联核心概念与选型思路,帮助初学者

weixin_32642109的博客 268

UNIQUE约束从原理到实践:唯一索引、NULL行为与并发防重

在数据库设计与维护中,保证数据唯一性是数据一致性的基础要求。UNIQUE约束作为SQL标准中的核心完整性约束之一,其底层通过唯一索引的B+树结构实现高效的重复值检测,确保写入数据符合业务规则。在并发写入场景下,数据库层UNIQUE约束比应用层判重更为可靠,能够从根源上杜绝重复数据产生。面对复合唯一、NULL值语义、主键区别、以及MySQL、PostgreSQL、Oracle、SQL Server等数据库的行为差异,开发者需要理解约束背后的机制才能避免踩坑。从表结构设计、约束定义到生产环境大表补约束的实操策略

weixin_29574585的博客 186

一般来说主键索引的树深度有几层?为什么是这个层数?

大型数据库表的主键索引B+树深度通常仅3-4层,极少达到5层。这得益于B+树的高扇出特性:每个16KB节点可存储约1170个键值指针(假设8字节主键+6字节指针)。计算表明,3层B+树可支持2200万行数据,4层则能支持256亿行。影响树深的关键因素包括页大小、主键长度和行数据大小,因此建议使用短小的自增整数作为主键以保持索引高效。这种设计确保了即使处理海量数据,查询也只需3-4次I/O操作。

python15397的博客 939

数据结构与算法 - 数据库索引:B+树提升查询效率的底层逻辑

本文深入解析了数据库索引的核心数据结构B+树,揭示了其高效查询的底层原理。通过对比B树、哈希表等结构,阐明了B+树在磁盘I/O优化、范围查询支持等方面的独特优势。文章详细剖析了B+树的多路平衡特性、叶子节点链表设计以及高度平衡机制,并通过可视化流程图展示了查找、插入分裂和删除合并的具体过程。最后,作者用Python实现了一个简化版B+树,帮助读者从理论到实践全面理解这一数据库关键技术。全文以清晰的逻辑和生动的示例,展现了B+树如何将查询复杂度从O(n)降至O(log n),成为现代数据库索引的标准实现方案。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

【MySQL】数据库中为什么使用B+树不用B树

数据库索引是提高查询性能的关键因素之一,而在索引结构的选择中,B+树相对于B树更为常见和优势。本文深入探讨了为何数据库更倾向于使用B+树,详细解释了B+树相对于B树的优势。B+树通过有序叶子节点和链表结构,提供了更适合范围查询和顺序访问的特性,减少了磁盘IO次数,同时降低了非叶子节点的存储开销。这使得B+树在实际应用中更为高效,成为大多数数据库管理系统的首选索引结构。然而,索引结构的选择仍需根据具体应用场景和需求综合考虑,以实现最佳的性能和效率。深入理解B树和B+树的特性,有助于数据库开发者更好地进行索引设

AliceNo的博客 4634

PostgreSQL自增主键的用法以及在mybatis中的使用

PostgreSQL自增主键的用法以及在mybatis中的使用

congge 1万+

PostgreSQL 和 MySQL两个数据库的索引的区别

PostgreSQL和MySQL的索引功能存在显著差异。两者都支持B-Tree、唯一索引等基本类型,但PostgreSQL提供更丰富的索引类型(如GIN、GiST、BRIN),支持部分索引、并发创建索引等高级功能,适合复杂查询场景。MySQL则更侧重实用性,支持全文索引和空间索引,适合传统Web应用。PostgreSQL的索引体系更灵活强大,而MySQL在简单CRUD和高并发OLTP场景中表现更成熟。根据需求选择:复杂数据用PostgreSQL,常规Web应用用MySQL。

python15397的博客 1199

PostgreSQL 和 MySQL InnoDB:主键索引到底需不需要“回表”?

先通过索引找到数据位置,再去真正的数据表里把完整记录取出来,这一步就可以理解为回表。SELECT *如果索引里只有id和数据地址,那么数据库找到id = 1001后,还要再去数据表里取order_noamount等其他字段,这就是“回表”。数据库主键索引结构主键叶子节点存什么是否需要回表PostgreSQLB-tree 索引 + heap 表分离主键值 + TID通常需要访问 heapPostgreSQLCLUSTER后heap 按索引顺序重排主键值 + TID。

u011962508的博客 503
上一篇: Spring Boot 应用启动组件加载顺序与优先级详解
下一篇: PostgreSQL 和 MySQL两个数据库的索引的区别
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值