Oracle分区
概念
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
作用
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。
分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用SQL DML 命令访问分区后的表时,无需任何修改。
SELECT partition_name, high_value, tablespace_name, num_rows
FROM user_tab_partitions
WHERE table_name = 'Emp'
此处是按时间滚动(单位为小时)自动分区,high_value展示的为分区信息,
查看分区大小
SELECT
partition_name,
segment_type,
tablespace_name,
ROUND(bytes/1024/1024, 2) AS size_mb,
ROUND(bytes/1024/1024/1024, 2) AS size_gb
FROM dba_segments
WHERE
owner = 'USER' -- 替换为实际schema名
AND segment_name = 'EMP' -- 表名需大写
AND segment_type LIKE 'TABLE%PARTITION' -- 过滤分区段
ORDER BY partition_name
查看整表存储空间
SELECT
segment_type,
tablespace_name,
ROUND(bytes/1024/1024, 2) AS size_mb,
ROUND(bytes/1024/1024/1024, 2) AS size_gb
FROM dba_segments
WHERE
owner = 'USER' -- 替换为实际schema名
AND segment_name = 'EMP' -- 表名需大写