Photo by Lorem Ipsum
647 words
3 minutes
SQL 系列(四):存储结构与数据类型
SQL 教程
Posts in this series (10)AI 智能总结
数据库 4 存储结构与数据类型
底层存储决定磁盘占用、查询性能,合理选择数据类型与存储载体是数据库优化基础。本文区分三类数据库存储架构、数据类型选型要点。
一、常用数据类型选型准则
选型核心原则:在满足业务前提下,选用占用存储空间最小的类型,减少内存IO与索引体积。
-
数值类型
INT(4字节)优先于BIGINT(8字节);小数尽量使用DECIMAL定点数,杜绝FLOAT/DOUBLE浮点精度丢失问题。 -
字符串类型
短字符使用VARCHAR;固定长度字段选用CHAR;超大文本避免使用字符串列,改用专业大字段类型。 -
时间类型
优先专用时间类型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;三、实践优化要点
- 数据类型不要过度预留长度,减小索引与磁盘开销;
- MySQL新项目统一使用InnoDB,放弃MyISAM;
- Oracle利用表空间实现数据分层;SQLServer借助文件组分散磁盘压力;
- 大字段避免和高频查询字段放在一起,必要时做垂直分表。
SQL 系列(四):存储结构与数据类型
https://fuwari.vercel.app/posts/sql-series/sql-04-storage-types/