首页 / ORACLE / Oracle学习(十四)分表分区
Oracle学习(十四)分表分区
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle学习(十四)分表分区,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2286字,纯文字阅读大概需要4分钟。
内容图文
一、前言
大数据量的查询,不仅查询速度非常慢,而且还会导致数据库经常宕机,在尝试添加索引及查询方式修改后,还有没有更有效的解决方案呢?
分库、分表、分区这些概念咱就应该了解一下。
二、分表
假如一个大型商城有一个订购关系表,每个用户的订单都落在这个表里面,那么时间一长,要进行查询的时候,肯定慢得要死,这样的系统给客户用,那就凉凉思密达了...
拆分思想
咱可以对这个总表进行拆分,例如对年进行拆分,每个年表只存一年的记录,那么这样数据就分散开来了,每个表的数据就少很多,根据具体情况还可以按月分,按日分等等...
PS:注意,分表使用时,查询语句里要进行动态拼装查询的表名。
三、分区
简介
年表创建过后,查询就是查询年表中的数据,可是虽然分表了,但是年表中的数据量仍然很大,查询速度虽然有提升,但并不能满足用户的要求,此时考虑在年表中再根据月份进行分区。
定义
表分区后,逻辑上仍然是一张表,只不过将表中的数据在物理上存放到多个表空间上。
目的
这样在查询数据时,会查询相应分区的数据,减少SQL操作的数据量,避免了全表扫描,从而提升查询效率。
水平分区
对行进行分区,举个例子来说,就是一个表中有1000万条数据,每100万条数据划一个分区,这样就将表中数据分到10个分区中去。
PS:水平分区要通过某个特定的属性列进行分区,如用时间先orderBy后再分区。
垂直分区
对列进行分区,减少表的宽度,从而提升查询效率。
比如一个学生表中,有他相关的信息列,还有论文列以CLOB存储,可以把这些不经常使用的CLOB划分到另一个分区,需要访问时再调用它。
代码样例
--水平分区 --按照订单时间进行水平分区 CREATE TABLE ORDER_ACTIVITIES ( ORDER_ID NUMBER(7) NOT NULL, ORDER_DATE DATE, TOTAL_AMOUNT NUMBER, CUSTOTMER_ID NUMBER(7), PAID CHAR(1) ) PARTITION BY RANGE (ORDER_DATE) ( PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACE ORD_TS01, PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02, PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03 ); --按省份进行分区 CREATE TABLE ListTable ( id INT PRIMARY KEY , name VARCHAR (20), area VARCHAR (10) ) PARTITION BY LIST (area) ( PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb, PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb ); --垂直分区 PS:垂直分区思路是将写入操作比较频繁的数据表,把这个两个表分离出来,放在不同的服务器
PS:可以理解为外键的关联方式(不知道准不准确...)
内容总结
以上是互联网集市为您收集整理的Oracle学习(十四)分表分区全部内容,希望文章能够帮你解决Oracle学习(十四)分表分区所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。