数据库对象--索引,序列,同义词

索引
  
      Oracle服务器索引时一个方案对象,它可以通过使用指针来加速对行的检索。索引可以显示创建或自动创建。如果在列上没有索引,则系统会对整个表进行扫描。
      使用索引可以直接和快速地访问表中的行。索引的目的是通过使用一个索引的路径来快速查找数据,从而减少必需的磁盘I/O操作。所以你是由Oracle服务器自动使用和维护的。

 

  创建索引
     自动创建:如果在表定义中定义了PRIMARY KEY或UNIQUE约束,则系统会自动创建一个唯一索引
     手动创建:用户可以在列上创建非唯一的索引,以加速对行的访问。
   
   E.G

     (1) 在表EMPLOYEES的LAST_NAME列创建索引
         create index emp_last_name_idx  on  employees(last_name);
     (2)删除索引
         drop index emp_last_name_idx;

 

 什么情况下要创建索引?
    1.列包含较大范围的值
    2.列包含大量空值
    3.在where子句或联结条件中频繁使用一个或多个列
    4.表相当大,但是预计多数的查询检索的行不到总行数的百分之二至百分之四

 

 什么情况下不创建索引?
    1.表比较小
    2.在查询中不经常使用列作为条件
    3.预计多数查询检索的行要超过表中总行数的百分之二至百分之四
    4.表更新比较频繁
    5.被索引的列将作为表达式的一部分进行使用
  
  E.G
     SCOTT>create index idx_ename on emp(ename);手动创建索引
     SCOTT>select index_name from user_indexes;查看该用户创建的索引
     SCOTT>select ename,sal from emp where ename='SCOTT';
       
      要想知道上面那条查询语句走的是索引还是没有走索引,首先我们打开监控索引的东西
      SCOTT>alter index idx_ename monitoring usage;(监控索引)
      SYS>select * from object_usage;(系统用户下查看索引,查看object_id=XXX)
      SCOTT>select object_id,object_name from user_objects where object_id=XXXX;
      SCOTT>alter index idx_ename nomonitoring usage;(关闭索引)
      SCOTT>drop index idx_ename;(干掉索引)
    

序列
   
      序列的用户创建的数据库对象,它可以由多个用户共享,用来生成唯一的整数。
      序列的通常用途是创建主键值,主键值对于每行都必须是唯一的。序列由内部的Oracle例行程序生成和递增(或递减)。序列号的存储和生成与表无关,同一序列可以用于多个表。

 

   创建序列
        例如,创建一个名为DEPT_DEPTID_SEQ的序列,将它用作表DEPARTMENTS的主键,不使用CYCLE选项。
        create sequence dept_deptid_seq
                                   increment by 10
                                   start with 120
                                   maxvalue 9999
                                   nocache
                                   nocycle;

 

   确认序列(查看user_sequences数据字典)
        select sequence_name,min_value,max_value,increment_by,last_number from user_sequences;

 

  删除序列
        drop sequence dept_deptid_seq;

 

  NEXTVAL和CURRVAL伪例
       NEXTVAL会返回下一个可用的序列值。每次被引用时它都会返回一个唯一的值,即使对于不同的用户也是这样。
       CURRVAL会获得当前序列值
       必须对该序列发出NEXTVAL,然后CURRVAL才能包含值

 

  使用序列
      1)在内存中高速缓冲序列值可以更快地访问那些值
      2)当发生以下情况时,序列值会出现间断:
         --发生回退
         --系统崩溃
         --在其他表中使用了序列
      3)如果创建序列时使用了NOCACHE选项,可以通过查询USER_SEQUENCES表来查看下一个可用的值

 

同义词

  

      通过创建同义词(对象的另一个名称)可以简化对对象的访问,同义词可以分为私有的和公有的。
      可以通过select * from user_synonyms;来查看同义词的信息

 

     优点:易于引用其他用户所拥有的表
                缩短冗长的对象名

 

     创建和删除同义词(之前当然要有相应的权限)
         SCOTT>create synonym d for dept;(私有的)
         SCOTT>drop synonym d;
         SYS> create public synonym e for app.hello(公有的,其中app.hello的意思,app为用户,hello为app用户下的表)
         SYS>drop public synonym e;

 

  E.G
         SYS>grant create synonym to scott;
         SCOTT>create synonym d for dept;
         SCOTT>select * from d;

         假设scott用户存在e表
         SYS>create public synonym e for app.hello;
         SYS>grant select on app.hello to scott;
         SCOTT>select * from e;
         SCOTT>drop table e purge;
         SCOTT>select * from e;
  
   总结:在进行查询的时候的顺序,有存在表名为e的先执行,没有的话再找私有的,最后才找公有的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值