创建表的过程(包含表、表空间、主外键、索引、注释),关于索引的理解

-- Create table:1.创建一个表
create table ACT_RU_IDENTITYLINK
(
  ID_           NVARCHAR2(64) not null,
  REV_          INTEGER,
  GROUP_ID_     NVARCHAR2(255),
  TYPE_         NVARCHAR2(255),
  USER_ID_      NVARCHAR2(255),
  TASK_ID_      NVARCHAR2(64),
  PROC_INST_ID_ NVARCHAR2(64),
  PROC_DEF_ID_  NVARCHAR2(64)
)
tablespace FTYTH
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 5
    next 1
    minextents 1
    maxextents unlimited
  );

----2.添加注释

comment on table ACT_RU_IDENTITYLINK
  is 'XXXX表';
-- Add comments to the columns
comment on column ACT_RU_IDENTITYLINK.REV_ 
  is '单位名称';
comment on column ACT_RU_IDENTITYLINK.TYPE_  
  is '基本工资*12';
-- Create/Recreate primary, unique and foreign key constraints :3.说明主键和外检
alter table ACT_RU_IDENTITYLINK
  add primary key (ID_)
  using index
  tablespace FTYTH
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 14M
    next 1M
    minextents 1
    maxextents unlimited
  );
alter table ACT_RU_IDENTITYLINK
  add constraint ACT_FK_IDL_PROCINST foreign key (PROC_INST_ID_)
  references ACT_RU_EXECUTION (ID_);
alter table ACT_RU_IDENTITYLINK
  add constraint ACT_FK_TSKASS_TASK foreign key (TASK_ID_)
  references ACT_RU_TASK (ID_);
-- Create/Recreate indexes :4.创建索引。给这个表中的五个字段都创建了索引
create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK (PROC_DEF_ID_)
  tablespace FTYTH
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK (GROUP_ID_)
  tablespace FTYTH
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK (USER_ID_)
  tablespace FTYTH
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 7M
    next 1M
    minextents 1
    maxextents unlimited
  );
create index ACT_IDX_IDL_PROCINST on ACT_RU_IDENTITYLINK (PROC_INST_ID_)
  tablespace FTYTH
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 5M
    next 1M
    minextents 1
    maxextents unlimited
  );
create index ACT_IDX_TSKASS_TASK on ACT_RU_IDENTITYLINK (TASK_ID_)
  tablespace FTYTH
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 4M
    next 1M
    minextents 1
    maxextents unlimited
  );

下面是关于索引的理解:

第一个人:索引的作用就在于,为某个字段建立了索引之后,查询这个字段里面的数据的时候,效率更高,也就是快, 比如 create index abc on stu(age); 为stu表的age字段建立了索引,那么查询时,select * from stu where age > 10; 这个时候效率就高,主要体现在where语句,where age > 10 ,将age 作为查询的条件,age又加了索引所以高。 索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据,也就是当进行查询时,系统先搜索索引,从中找到数据的指针,再直接通过指针,直接定位到数据上,所以快。 缺点: 还有就是需要注意的,索引是查的效率高了,但是在表中插入或更新数据时,将有额外的操作来维护索引,所以其他的效率低了,还有占用存储空间,还有不要建立过多的索引,过多索引引起反作用!


第二个人:加快查询速度,唯一索引可以确定唯一性等等,但不是索引越多越好
 对于查询表越多速度越快,对于经常要更新的表,如果多了,反而会慢,因为要插入之前,先要扫描下索引


第三个人:你查字典,是从第一页开始往后翻呢?还是会按 拼音/部首 索引 查找?


第四个人:数据库会给表里的索引生成索引页 类似字典的目录 加快查询的效率. 不用全表扫描了`. 缺点就是当插入时当索引页不够的话 需要有索引页的IO开销

第五个人:把数据库看作一本书,把索引看作书的目录,这样查找就比较方便,快捷了


第六个人:索引的优缺点
1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:A、正确选择复合索引中的主列字段,一般是选择性较好的字段;B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;8、频繁进行数据操作的表,不要建立太多的索引;9、删除无用的索引,避免对执行计划造成负面影响;以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

猜你喜欢

转载自1601844782.iteye.com/blog/2267219