Oracle 表压缩技术 SQL
Oracle 表压缩技术 SQL
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
表压缩节省空间[1]:
类型:
- Basic Table Compression
- OLTP Table Compression
- Advanced Row Compression
- Hybrid Columnar Compression (HCC)
详细见:Oracle 表压缩技术。
2. Basic Compression
2.1 创建
CREATE TABLE sales COMPRESS BASIC;
-- 或
CREATE TABLE sales (...) COMPRESS;
2.2 适用
- 批量加载
- 只读/少量更新
- 数据仓库
2.3 限制
- 仅直接路径加载生效
- DML 不压缩
- 不适合 OLTP
3. OLTP Compression
3.1 创建
CREATE TABLE employees COMPRESS FOR OLTP;
3.2 适用
- OLTP
- 频繁 DML
- 通用
3.3 特性
- DML 也压缩
- 性能影响小
- 节省 2-4x 空间
4. Advanced Row Compression(12c+)
4.1 创建
CREATE TABLE employees COMPRESS ADVANCED LOW;
4.2 特性
- OLTP 改进
- 低开销
- 高压缩
5. Advanced Compression HIGH
5.1 创建
CREATE TABLE sales COMPRESS ADVANCED HIGH;
5.2 适用
- 数据仓库
- 历史数据
- 只读
6. HCC(Exadata)
6.1 类型
-- Query Low
CREATE TABLE sales COMPRESS FOR QUERY LOW;
-- Query High
CREATE TABLE sales COMPRESS FOR QUERY HIGH;
-- Archive Low
CREATE TABLE sales COMPRESS FOR ARCHIVE LOW;
-- Archive High
CREATE TABLE sales COMPRESS FOR ARCHIVE HIGH;
6.2 压缩比
| 类型 | 压缩比 | 性能 |
|---|---|---|
| Query Low | 4-6x | 高 |
| Query High | 8-10x | 中 |
| Archive Low | 10-15x | 低 |
| Archive High | 15-30x | 极低 |
7. 修改压缩
7.1 ALTER
ALTER TABLE sales COMPRESS FOR OLTP;
ALTER TABLE sales NOCOMPRESS;
7.2 MOVE
-- 重建压缩
ALTER TABLE sales MOVE COMPRESS FOR OLTP;
ALTER TABLE sales MOVE COMPRESS FOR ARCHIVE HIGH;
7.3 在线索引
ALTER TABLE sales MOVE COMPRESS FOR OLTP ONLINE;
8. 分区压缩
8.1 不同分区不同压缩
CREATE TABLE sales (...)
PARTITION BY RANGE (sale_date) (
PARTITION p2024 VALUES LESS THAN (...) COMPRESS FOR ARCHIVE HIGH,
PARTITION p2025 VALUES LESS THAN (...) COMPRESS FOR QUERY LOW,
PARTITION p2026 VALUES LESS THAN (...) COMPRESS FOR OLTP
);
8.2 修改
ALTER TABLE sales MODIFY PARTITION p2024 COMPRESS FOR ARCHIVE HIGH;
ALTER TABLE sales MOVE PARTITION p2024 COMPRESS FOR ARCHIVE HIGH ONLINE;
9. LOB 压缩
9.1 SecureFiles
CREATE TABLE docs (
id NUMBER,
content CLOB
) LOB(content) STORE AS SECUREFILE (
COMPRESS HIGH
DEDUPLICATE
CACHE
);
9.2 修改
ALTER TABLE docs MODIFY LOB(content) (
COMPRESS HIGH
);
10. 索引压缩
10.1 前缀压缩
CREATE INDEX idx_emp ON employees(dept_id, name) COMPRESS 1;
10.2 高级
CREATE INDEX idx_emp ON employees(dept_id, name) COMPRESS ADVANCED LOW;
11. 压缩效果
11.1 查看
SELECT
table_name,
compression,
compress_for
FROM user_tables
WHERE compression = 'ENABLED';
11.2 大小对比
SELECT
segment_name,
bytes / 1024 / 1024 AS mb
FROM user_segments
WHERE segment_name IN ('SALES_COMP', 'SALES_NOCOMP');
11.3 压缩比
SELECT
table_name,
num_rows,
blocks,
ROUND(num_rows / blocks, 2) AS rows_per_block
FROM user_tables
WHERE table_name LIKE 'SALES%';
12. 性能影响
12.1 优势
- 空间节省
- I/O 减少
- Buffer Cache 高效
- 查询快
12.2 开销
- CPU 增加
- DML 略慢
- 解压 CPU
13. 压缩策略
13.1 OLTP
-- Advanced Row Compression
COMPRESS ADVANCED LOW
13.2 数据仓库
-- 活跃数据
COMPRESS FOR QUERY LOW
-- 历史数据
COMPRESS FOR ARCHIVE HIGH
13.3 归档
-- 旧分区
ALTER TABLE sales MOVE PARTITION p2024 COMPRESS FOR ARCHIVE HIGH ONLINE;
14. 常见坑与排错
14.1 压缩无效
-- Basic 仅直接路径
-- INSERT /*+ APPEND */ INTO ...
14.2 性能下降
-- 1. 高压缩 CPU
-- 2. 改 LOW
-- 3. 测试
14.3 MOVE 锁表
-- ONLINE
ALTER TABLE ... MOVE ... ONLINE;
15. 最佳实践
- OLTP 用 Advanced Row:兼容 DML
- 仓库用 Query:平衡
- 归档用 Archive:节省
- 分区不同压缩:分级
- 在线 MOVE:不影响业务
- LOB SecureFiles:现代
- 索引压缩:复合
- 测试验证:效果
- 监控空间:收益
- 文档化:策略
16. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Table Compression” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/tables.html