647 words
3 minutes
SQL 系列(四):存储结构与数据类型

AI 智能总结

数据库 4 存储结构与数据类型#

底层存储决定磁盘占用、查询性能,合理选择数据类型与存储载体是数据库优化基础。本文区分三类数据库存储架构、数据类型选型要点。

一、常用数据类型选型准则#

选型核心原则:在满足业务前提下,选用占用存储空间最小的类型,减少内存IO与索引体积。

  1. 数值类型
    INT(4字节)优先于BIGINT(8字节);小数尽量使用DECIMAL定点数,杜绝FLOAT/DOUBLE浮点精度丢失问题。

  2. 字符串类型
    短字符使用VARCHAR;固定长度字段选用CHAR;超大文本避免使用字符串列,改用专业大字段类型。

  3. 时间类型
    优先专用时间类型DATE/DATETIME,不要用字符串存储时间。

-- 通用建表演示
CREATE TABLE member(
id INT PRIMARY KEY,
phone VARCHAR(11),
create_time DATETIME,
amount DECIMAL(10,2)
);

方言差异#

  • MySQL:VARCHAR最大65535字节;提供TINYINT、MEDIUMINT细分整型。
  • Oracle:无VARCHAR,使用VARCHAR2;时间类型DATE自带时分秒。
  • SQLServer:提供NVARCHAR支持unicode,存储中文建议优先选用。

二、底层存储载体架构(核心区别)#

1. MySQL:存储引擎#

引擎是表级存储实现,同库不同表可使用不同引擎。

  • InnoDB(默认推荐):支持事务、行锁、外键、MVCC;数据与索引存储在.ibd文件,拥有聚簇索引。
  • MyISAM(淘汰):不支持事务、只支持表锁;查询速度快,崩溃无法安全恢复。
-- 指定存储引擎
CREATE TABLE test(id INT) ENGINE = InnoDB;

2. Oracle:表空间(Tablespace)#

没有存储引擎概念,以表空间作为存储管理单元。 表空间由多个数据文件组成,一张表的数据可以分散在多个数据文件,支持冷热数据分层存放。

-- 创建表空间示例
CREATE TABLESPACE ts_data DATAFILE '/oracle/data/ts01.dbf' SIZE 100M;
-- 指定表所属表空间
CREATE TABLE test(id INT) TABLESPACE ts_data;

3. SQLServer:数据文件#

数据库由主数据文件.mdf、辅助数据文件.ndf、日志文件.ldf组成。 数据按文件组管理,可将表、索引分配至不同文件组,实现IO负载分离。

-- 创建文件组(简化示例)
ALTER DATABASE testdb ADD FILEGROUP fg_data;

三、实践优化要点#

  1. 数据类型不要过度预留长度,减小索引与磁盘开销;
  2. MySQL新项目统一使用InnoDB,放弃MyISAM;
  3. Oracle利用表空间实现数据分层;SQLServer借助文件组分散磁盘压力;
  4. 大字段避免和高频查询字段放在一起,必要时做垂直分表。
SQL 系列(四):存储结构与数据类型
https://fuwari.vercel.app/posts/sql-series/sql-04-storage-types/
Author
Zero02
Published at
2025-04-22
License
CC BY-NC-SA 4.0