SQL(Structured Query Language):关系型数据库
数据结构:使用表格的形式来存储数据,每个表由行和列组成,每一行代表一个实体/记录,每一列代表实体的一个属性
产品:MySQL/PostgreSQL/Oracle
NoSQL(Not Only SQL):非关系型数据库
数据结构:文档型(JSON/XML),键值对,图形,列族等多种形式
产品:文档(MongoDB),键值对(Redis),图形(Neo4j),列族(HBase),多模型(ArangoDB),时序(InfluxDB)
char/varchar
char(n):固定长度n,最大字符长度n,长度不足n使用空格填充
优点:存储效率较高
缺点:可能浪费空间
varchar(n):可变长度,最大字符长度n,存储实际使用的字符数
优点:节省空间
缺点:可能引起一些性能开销
表膨胀(Table Bloat)
定义:表实际占用的物理空间远大于有效数据所需的存储空间
原因:
废弃元组(Dead tuples):在MVCC模型下,当数据行被删除/更新时,不会立即从磁盘上清除旧版本的数据,而是标记为"已死"(dead tuple),这些已经无效但仍占据磁盘空间的数据行会导致表膨胀
自由空间碎片(Free space fragmentation):表中的数据块因为多次插入/删除操作后留下许多不可用的小片连续空闲空间,尽管总体上有足够的可用空间,但由于分布不均,新插入的数据可能无法有效利用这些空闲空间,从而导致表文件继续增大
未回收的空间(Unused space):删除大量数据或者数据更新后,原本分配给这些数据的空间如果没有被清理和回收,也会增加表的膨胀程度