目录

一、项目新建表、主键、索引注意事项

二、举例说明建表、主建、索引的操作方法

2.1 设定需求如下

2.2 普通表操作方法

2.3 分区表操作方法

三、表、主键、索引的常规维护操作

3.1 表结构修改的方法举例

3.2 表、主建、索引的日常维护举例

一、项目新建表、主键、索引注意事项

  • 需要显示指定表和索引所属表空间,具体语法可参考下文中的示例。
  • 表是否分区根据业务实际需求确定,一般单表数据量超过千万以上,并有周期性删除历史数据需求的表需要考虑使用分区表。
  • 如果是分区表,需要注意对应的索引是本地(local)索引。
  • 主键默认就包含了一个唯一性索引,同样需要注意所属表空间问题。
  • PL/SQL工具获取的分区表的建表语句,主建和索引部分获取不到local关键字,需要手动添加上。

二、举例说明建表、主建、索引的操作方法

下面就对上面所说的注意事项,举例说明实际建表、主建、索引的操作方法。

2.1 设定需求如下

1. 建普通表t_normal, 字段id, name, start_time, content,
设定id列为表t_normal的主建,主键名称为pk_t_normal_id,
建立id,name两列的组合索引,索引名称为idx_t_normal。 2. 建分区表t_part, 字段id, name, start_time, content,
分区字段是start_time,按天分区,
建立start_time,id两列为表t_part的主建,主键名称为pk_t_part_id,
建立start_time,id,name三列的组合索引,索引名称为idx_t_part。

2.1.1查询数据库有哪些表空间

select name from v$tablespace;

2.1.2本文档假设数据库有这两个业务用户的表空间:

DBS_D_XXX     存放数据的表空间
DBS_I_XXX 存放索引的表空间

注:新建表及其索引属于哪个表空间根据项目自己的规划自行判断。实际网优项目中用户自定义的表空间都是DBS_D开头的是存放数据,DBS_I开头的是存放索引。

2.2 普通表操作方法

2.2.1新建普通表示例

create table t_normal(
id number,
name varchar2(20),
start_time date,
content varchar2(200)
)tablespace dbs_d_xxx;

注:表示建立的t_normal表数据存放在dbs_d_xxx表空间中。

2.2.2普通表建立主建示例

alter table t_normal add constraint pk_t_normal_id primary key(id) using index tablespace dbs_i_xxx;

注:表示建立的主建pk_t_normal_id对应的唯一性索引pk_t_normal_id数据存放在dbs_i_xxx表空间中。

2.2.3普通表建立索引示例

create index idx_t_normal on t_normal(id, name) tablespace dbs_i_xxx;

注:表示建立的索引idx_t_normal数据存放在dbs_i_xxx表空间中。

2.3 分区表操作方法

项目中新建表,一般常用的分区表基本都是range分区,这里就以range分区举例说明。

2.3.1新建分区表示例

create table t_part(
id number,
name varchar2(20),
start_time date,
content varchar2(200)
)partition by range(start_time)
(
partition P20150101 values less than (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace dbs_d_xxx,
partition P20150102 values less than (TO_DATE(' 2015-01-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace dbs_d_xxx,
partition P20150103 values less than (TO_DATE(' 2015-01-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace dbs_d_xxx
);

注:partition by range() 括号中是分区字段,下面的括号中就是包含的具体分区,每个分区都需要显示指定存放表空间名称。

上面示例建了3个分区,实际项目可能需要创建半年的分区,格式与上面一样,这里给出一个15年上半年的分区示例,便于参考。只需根据项目实际情况更改分区字段和表空间名称即可。

2.3.2分区表建立主建示例

 alter table t_part add constraint pk_t_part_id primary key(start_time, id) using index local tablespace dbs_i_xxx;

注:分区表这里多了local关键字,如果没有这个关键字,分区类操作(比如删除历史分区)会导致对应的索引失效,所以除非有特殊需求建立全局索引,否则都应该建立本地索引,即必须加上local关键字。

2.3.3分区表建立索引示例

create index idx_t_part on t_part(start_time, id, name) local tablespace dbs_i_xxx;

注:同样注意要加local关键字。

2.3.4分区表添加一个分区

alter table t_part add partition P20150104 values less than (TO_DATE(' 2015-01-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace dbs_d_xxx;

注:分区表t_part添加一个分区P20150104,这里对应存放的是20150103的数据。

2.3.5分区表删除一个分区

alter table t_part drop partition P20150104;

注:分区表t_part删除分区P20150104。

三、表、主键、索引的常规维护操作

3.1 表结构修改的方法举例:

3.1.1表添加一个字段

alter table t_part add content2 varchar2(50);

注:t_part表添加字段content2 数据类型varchar2(50)

3.1.2表添加多个字段

alter table t_part add (
content3 varchar2(50),
content4 varchar2(50),
content5 varchar2(50)
);

注:t_part表添加3个字段content3, content4, content5 数据类型都为varchar2(50)

3.1.3表删除一个字段

alter table t_part drop column content5;

注:t_part表删除字段content5,一般不推荐删除表的字段。

3.1.4表删除多个字段

alter table t_part drop(content3, content4);

注:t_part表删除多个字段content3,content4,一般不推荐删除表的字段。

3.1.5表修改一个字段的数据类型

alter table t_part modify id number(7,0);

注:t_part表修改id字段的数据类型为number(7,0)

3.1.6表修改多个字段的数据类型

alter table t_part modify(
name varchar2(50),
content varchar2(50)
);

注:t_part表修改name字段的数据类型为varchar2(50), 修改content字段的数据类型为varchar2(50)

3.2 表、主建、索引的日常维护举例:

3.2.1删除表的主建

alter table t_normal drop primary key;
alter table t_part drop primary key;

注:删除普通表t_normal的主建,删除分区表t_part的主建。语法相同。

3.2.2删除表的索引

drop index idx_t_normal;
drop index idx_t_part;

注:删除普通表的普通索引,删除分区表的分区索引。语法相同。

3.2.3重建/新建表的主建

普通表t_normal建立主建:

alter table t_normal add constraint pk_t_normal_id primary key(id) using index tablespace dbs_i_xxx;

分区表t_part建立主建:

alter table t_part add constraint pk_t_part_id primary key(start_time, id) using index local tablespace dbs_i_xxx;

注:上文已经提到过,这里再次重点强调,表的主建对应了一个唯一性索引,需要明确指定这个索引的存储表空间,另外,分区表建立主建语句中要有local关键字。

若表中的数据量在百万级别以上请慎重考虑需求是否合理,大表操作请跟DBA沟通后再操作。

3.2.4重建/新建表的索引

普通表在线建立索引:

create index idx_t_normal on t_normal(id, name) tablespace dbs_i_xxx online;

分区表在线建立索引:

create index idx_t_part on t_part(start_time, id, name) local tablespace dbs_i_xxx online;

注:跟上面新建表时建立索引方法一样,只是这里多了online参数可选,加上online参数的意思是在线建立索引,可以避免创建索引过程中,影响到其他会话对此表的DML操作。

每张表的索引个数不宜超过4个,否则会对此表的入库性能有影响。

若表中的数据量在千万级别以上,且确认要新建索引,请跟DBA沟通后再操作。

Oracle基础维护02-表、主键、索引、表结构维护手册的更多相关文章

  1. iot 表 主键索引叶子块包含了表所有数据

    <pre name="code" class="html">iot表测试: 在create table语句后面使用organization inde ...

  2. 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段

    原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...

  3. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  4. 删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,

    原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100 ...

  5. oracle 建表 主键自增序列/////

    oracle 建表 主键自增序列 (2011-10-12 11:59:22) 转载▼ 标签: 杂谈 分类: oracle SQL> create table sms_activity(  2   ...

  6. oracle 数据库 主键索引重建

    oracle 数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_ ...

  7. Oracle + Entity Framework 更新没有设置主键的表

    最近用Entity Framework 开发的时候,发现一个问题,在默认情况下,EF不能对一个没有主键的表进行更新.插入和删除的动作. 那么,应该怎么处理没有主键的表呢? 我们打开这个表的edmx文件 ...

  8. MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例

    创建a表 id主键 CREATE TABLE `a` (`id` bigint(20) NOT NULL AUTO_INCREMENT ,`message_id` int(11) NOT NULL,` ...

  9. Oracle对没有主键的表分页

    普通情况对于有主键,能够做唯一表识的表.我们能够利用主键和rownum配合实现.比如: select scott.emp.* from scott.emp left join (select empn ...

随机推荐

  1. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  2. 前端学HTTP之日志记录

    前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...

  3. 如何使用dos命令打开当前用户、当前日期、当前时间以及当前用户加当前时间?

    1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select user();当前用户 select cur ...

  4. 在配有英特尔® Iris™ 显卡的系统上通过优化对 Just Cause 3 进行增强

    高端 PC 继续通过高性能显卡驱动桌面游戏. 一流的"梦想机器"基于第六代智能 英特尔® 酷睿™ 处理器i7-6700K等 CPU,通常与高端独立显卡配合使用以运行要求最严苛的游戏 ...

  5. [每日Linux]Linux下xsell和xftp的使用

    实验缘由: 1.xsell在Linux下的作用就是远程登录的一个界面,也就是实现访问在Windows下访问Linux服务器的功能.之前在数据挖掘实验中因为自己电脑的内存不够,曾经使用过实验室的服务器跑 ...

  6. Spring MVC重定向和转发以及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

  7. 支付宝web支付

    过程 1. 用户下单 2. 商户后台产生订单 3. 请求支付宝web支付页面(将订单信息返回给用户---放在form里面---隐藏起来-----并通过脚本自动提交此form到支付宝web支付页) 4. ...

  8. MVC5在Mono上的各种坑

    买了Macbook后,各种事情的纠缠,都没好好地用过OSX系统. 果断的装上了xcode和mono,还有monodevelop. 然后把项目移植到mono上运行,各种问题. 然后第一个问题来了 权限不 ...

  9. 纯JS打造比QQ空间更强大的图片浏览器-支持拖拽、缩放、过滤、缩略图等

    在线演示地址(打开网页后,点击商家图册): http://www.sport7.cn/cc/jiangnan/football5.html 先看一看效果图: 该图片浏览器实现的功能如下: 1. 鼠标滚 ...

  10. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...