oracle11g利用分区表进行查询性能的优化
来源:互联网 发布:英伟达experience优化 编辑:程序博客网 时间:2024/06/05 01:19
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。
什么时候使用分区表:
1、表的大小超过2GB。
2、表中包含历史数据,新的数据被增加都新的分区中。
(3).表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
oracle表分区有多种分区方式(列表分区、范围分区、散列分区.....),现以最常用的列表分区为例进行说明:
---根据每个部门创建表空间,并为jack用户创建一个默认表空间
CREATE TABLESPACE tbs_jack_hr
DATAFILE 'D:\mytablespace\tbs_jack_hr.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
CREATE TABLESPACE tbs_jack_dept10
DATAFILE 'D:\mytablespace\tbs_jack_dept10.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
CREATE TABLESPACE tbs_jack_dept11
DATAFILE 'D:\mytablespace\tbs_jack_dept11.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
CREATE TABLESPACE tbs_jack_dept12
DATAFILE 'D:\mytablespace\tbs_jack_dept12.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
CREATE TABLESPACE tbs_jack_dept13
DATAFILE 'D:\mytablespace\tbs_jack_dept13.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
CREATE TABLESPACE tbs_jack_dept14
DATAFILE 'D:\mytablespace\tbs_jack_dept14.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
CREATE TABLESPACE tbs_jack_dept15
DATAFILE 'D:\mytablespace\tbs_jack_dept15.dbf'
SIZE 10m
autoextend on next 5m
extent management local;
--创建用户并指定表空间
create user jack identified by test123
default tablespace tbs_jack_hr;
--切换到jack用户
conn jack/test123;
--建立部门表
create table department
(
deptId int constraint pk_mydept primary key,
deptName varchar2(20) not null,
remark varchar2(55)
)
;
insert into department values(10,'财务部','管理公司财务');
insert into department values(11,'销售部','负责公司销售');
insert into department values(12,'研发部','负责公司技术研发');
insert into department values(13,'后勤部','管理后勤事务');
insert into department values(14,'人事部','管理人力资源');
insert into department values(15,'法务部','负责公司官司');
----假如员工表的数据量很大,我们可以对员工表建立分区表(根据部门编号采用列表分区)
create table employee
(
empId int constraint p_emp primary key,
empName varchar2(20) not null ,
gender char(2) default '男',
age int constraint ck_age check( age>=18 and age<=60),
phone char(11) constraint ck_phone check(length(phone)=11),
email varchar2(30) not null,
deptIdd int constraint fk_deptIdd references department(deptid)
)
PARTITION BY LIST (deptIdd)
(
PARTITION PAR_10 VALUES (10) TABLESPACE tbs_jack_dept10,
PARTITION PAR_11 VALUES (11) TABLESPACE tbs_jack_dept11,
PARTITION PAR_12 VALUES (12) TABLESPACE tbs_jack_dept12,
PARTITION PAR_13 VALUES (13) TABLESPACE tbs_jack_dept13,
PARTITION PAR_14 VALUES (14) TABLESPACE tbs_jack_dept14,
PARTITION PAR_15 VALUES (15) TABLESPACE tbs_jack_dept15
)
;
--插入数据,数据会自动添加到对应的分区中
insert into employee values(1000,'张三','男',23,'12325469854','zs@qq.com',10);
insert into employee values(1001,'李四','男',24,'12375847896','lisi@qq.com',11);
insert into employee values(1002,'王二','男',22,'13725643256','wanger@qq.com',12);
insert into employee values(1003,'麻子','男',32,'13525471456','mazi@qq.com',12);
insert into employee values(1004,'小丽','女',19,'13858478996','xiaoli@126.com',12);
insert into employee values(1005,'小红','女',29,'13102156487','xiaohong@126.com',14);
insert into employee values(1006,'周星星','男',23,'13102156487','zxx@126.com',13);
insert into employee values(1007,'黑猩猩','男',24,'13102156487','hxx@126.com',13);
insert into employee values(1008,'大猩猩','男',26,'13102156487','dxx@126.com',14);
insert into employee values(1009,'刘亦菲','女',21,'13102156487','lyf@126.com',14);
insert into employee values(1010,'范冰冰','女',22,'13102156487','fbb@126.com',15);
insert into employee values(1011,'张靓颖','女',23,'13102156487','zly@126.com',10);
--查询某个分区的数据
select * from employee partition(PAR_15);
--查询表上有多少分区
SELECT * FROM user_TAB_PARTITIONS WHERE TABLE_NAME='EMPLOYEE'
- oracle11g利用分区表进行查询性能的优化
- 优化查询分区表中多个日期的数据
- 【MySql性能优化二】利用explain进行查询和分析sql语句
- Atitit 如何利用先有索引项进行查询性能优化
- oracle11g分页优化,rowid和rownum的性能比较,解决越往后数据查询越慢的问题
- oracle11g分区表
- 指定分区表分区进行查询
- 指定分区表分区进行查询
- SQL SERVER性能优化--分区表
- 利用交换分区优化频繁insert 和delete的分区表
- 【性能优化】之 BITMAP 及分区表 的演示
- mysql性能优化(利用索引优化查询速度)
- MySQL查询优化一例---自动利用索引进行优化
- MySQL查询的性能优化
- MySQL查询的性能优化
- 优化报表查询的性能
- MySQL查询的性能优化
- MySQL查询的性能优化
- n个数里最小的k个
- 32 Three.js的材质的种类和共有属性
- [LockFree之美] 共享变量的并发读写
- Android Init进程
- [LockFree之美] 使用Hazard Version实现的无锁Stack与Queue
- oracle11g利用分区表进行查询性能的优化
- 使用Python xlrd与xlwt模块读写Excel
- 数据结构编程笔记十九:第七章 图 图的邻接表存储表示及各基本操作的实现
- 【MYSQL】基础SQL语句总结(一)
- [LeetCode Solution 54] Spiral Matrix
- oracle索引优化
- 北大半年巨变:由被动变主动
- Python 使用递归函数实现汉诺塔
- 浅谈"指向二维数组的指针"