Oracle基础 12 对象 objects 同义词/序列/试图/索引

--创建同义词
create public synonym employees for hr.employees;  --公共同义词
需要 create public synonym 权限

表的所有用户授予公共权限  
grant select on employees to public;

create synonym t1_s for t1;   --私有同义词
如果想在不同的环境中通过不同的别名引用同一个表时,要创建私有同义词。
  
编译同义词 
alter synonym t1_s compile;
 
管理同义词
select table_name, synonym_name 
from dba_synonyms
where owner=‘IKKI‘;
  
删除同义词
drop public synonym employees;
drop synonym t1_s;

--创建序列
  create sequence seq1 
  increment by 1
  start with 1
  maxvalue 100 | minvalue 10 | nomaxvalue
  cache | nocache 
  cycle | nocycle;

例如:
  create sequence seq1
  increment by 1
  start with 10
  maxvalue 999
  nocache 
  nocycle;

查看序列
  select * from user_sequences; 
  select seq1.nextval from dual;
  select seq1.currval from dual;

使用序列
  create table emp2(
    id number(10),
    name varchar2(20),
    dept varchar2(20),
    bh number(10)
  );
  insert into emp2(bh,id,name,dept)
  values(seq1.nextval,302,‘tom‘,2002);

--rowid
  select rowid,bh,id,name  
  from emp2;

select * from emp2
  where rowid=‘AAASOVAAEAAAAKOAAB‘;

--创建试图
  create view my_employees as
  select employee_id,first_name,last_name,salary
  from employees
  where manager_id=122 
  with read only;            --用户只能从试图进行查询
  
删除试图
  drop view my_employees;

物化试图
  可以在物化试图上做以下事情:
  在物化试图上创建索引;
  在分区表上创建物化试图;
  对物化试图进行分区。

刷新方式
  on commit:用此方式,当一个主表的更改数据被提交时,物化试图被自动刷新以反应数据的更改。
  on demand:用此方式,你必须执行诸如 DBMS_MVIEW.REFREST 这样的过程来更新物化试图。

刷新类型
  complete:此刷新类型将完全重新计算基于物化试图的查询。如果物化试图原来花费12小时建立,那么重建也将花费同样的时间。显然,当主表中很少一部分行被更改、删除或插入时,不应该使用此选项。
  fast:Oracle 将使用物化试图日志来记录主表的所有更改。然后使用物化试图日志来更新物化试图。物化试图日志是基于相应物化试图的表。在物化试图与联接相关的每个表都需要有自己的物化试图日志,以便捕捉表的更改。
  force:如果选择此选项,Oracle 将尽量使用 fast 刷新机制,如果由于某些原因而不能使用该机制,则将使用 complete 刷新方法。此选项默认的刷新方法。
  never:此刷新选项不刷新物化试图。显然,对于主表有许多更改的物化试图来说,这不是一个可行的选项。

使用 DBMS_MVIEW 程序包

创建物化试图
1、授予必要的权限
   grant create materialized view to ikki;
   grant query rewrite to ikki;    
  
2、创建物化试图日志
   create materialized view log
   on products with sequence,rowid
   (prod_id, prod_name, prod_desc, prod_subcategory,
    prod_subcategory_desc, prod_category, prod_category_desc, prod_weight_class, prod_unit_of_measure, prod_pack_size, supplier_id,
    prod_status, prod_list_price, prod_min_price)
    including new values;

create materialized view log on sales
  with sequence,rowid
  (prod_id, cust_id, time_id, channel_id, promo_id,
   quantity_sold, amount_sold)
   including new values;

3、创建物化试图
  create materialized view product_sales_mv
  build immediate
  refresh fast
  enable query rewrite
  as select p.prod_name, sum(s.amount_sold) as dollar_sales,
  count(*) as cnt, count(s.amount_sold) as cnt_amt
  from sales s, products p
  where s.prod_id=p.prod_id
  group by p.prod_name;

build immediate:立即建立物化试图,这是默认选项。另一种方法是使用 build deferred 选项,此选项将在以后某个指定时刻装载物化试图及其数据。
  refresh fast:说明物化试图采用 fast 刷新方法。
  enable query rewrite:表示 Oracle 优化程序将透明的重写查询以使用新创建的物化试图而不是基础的主表。

SQL> create materialized view log on ygb;
Materialized view log created.

SQL> create materialized view mv_ygb
  2  refresh fast
  3  as select * from ygb;
Materialized view created.

删除物化视图日志
SQL> drop materialized view log on ygb;
Materialized view log dropped.

删除物化视图
SQL> drop materialized view mv_ygb;
Materialized view dropped.

--创建索引
  create index emp_tb_id on emp2(id);

删除索引
  drop index emp_tb_id;

重建索引
  alter index emp_tb_id rebuild;

alter index emp_tb_id rebuild online;

在进行索引的联机重建时,可以执行所有的 DML 操作,但不能执行任何 DDL 操作。

不可见索引
你可以把不可见索引作为临时索引,以便执行某些特殊操作,或者用来在索引成为正式索引前先对其进行测试。此外,有时使一个索引不可见可见替代删除索引或使其不可用。你可以使一个索引临时不可见来测试删除此索引的效果。

1、创建不可见索引
create index idx_test on test(tname)
invisible;

2、更改索引使其不可见
alter index idx_test invisible;
alter index idx_test visible;

3、查询索引是否可见
select index_name,visibility from user_indexes
where index_name=‘IDX_TEST‘;

--关于创建 Oracle 表的有效索引的准则:
    1、如果需要访问的数据不超过表中的4%或5%,则可以使用索引。全表扫描适用于请求的数据占全表数据百分比较高的查询。请记住,用索引来检索行需要两个读操作:即读索引和读表。
    2、相对较小的表应该避免使用索引。全表扫描很适合小表。对于小表不需要同时存储表的数据和索引的数据。
    3、为所有表创建主键。在指定一列作为主键时,Oracle自动创建该列的索引。
    4、对包括在多表联接操作中使用的列建立索引。
    5、对 where 子句中频繁使用的列建立索引。
    6、对包括在 order by 和 group by 操作的列或涉及排序的 union 和 distinct 等其他操作中的列建立索引。由于索引已经被排序,因此执行前述操作的排序要求将显著减少。
    7、由长字符串组成的列通常不是索引的候选列。
    8、被频繁更改的列由于涉及开销问题,理论上不建索引。
    9、使索引数目较少。
    10、当唯一列值可能不唯一时需要使用组合索引。在组合索引中,驱动列或第一列应该为选择性最强的列。
建立索引的黄金法则:表的索引应该基于你锁期望的查询中出现的表列。一个表可以创建多个索引:可以选择创建X列或Y列或二者的组合索引。

时间: 2024-10-24 04:26:37

Oracle基础 12 对象 objects 同义词/序列/试图/索引的相关文章

oracle sql 基础(五):数据定义语言(创建和管理序列、索引、同义词)

许多应用程序要求使用唯一的数字作为主键的值,你即可以在应用程序中构建代码来处理这种需求,也可以用一个序列来产生唯一的数字.如果你想要增进某些查询的性能,你应该考虑创建一个索引,你也可以用索引在列或列的集合上强制唯一性.你可以用同义词为对象提供可替代的名字.下面我们来介绍序列.索引和同义词三个数据库对象.       一.创建和管理序列 序列是用户创建的数据库对象,可以被多个用户共享. 序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的.序列由一个Oracle内部程序产生并增加或减少

Oracle对象下集(序列、同义词、分区表、database link)

本人所有博文纯手码,给个关注或者赞吧!博主:张晨晨QQ:1445696451欢迎随时加Q讨论技术.一.Oracle的序列·序列是用来生成惟一的连续的整数的数据库对象.序列通常可以用来自动生成主键或者唯一键的值:可根据数值进行升序或者降序的排列·比如创建班级的学生信息登记表,可以将学号使用序列自动生成.班级的学号都是10000~10060这个范围,每登记一个学生,序列自动增长一个.1.创建序列的命令语法create sequence seq_name [start with interger] [

Oracle数据库对象(视图、序列、索引、同义词)

1.视图 视图是一张虚表(是表但是没有数据,数据来自于视图所依赖的表) (1)先为用户授权: 管理员登录: 管理员授权给用户SCOTT: (2)视图的创建: (3)优点:简化查询,有的时候只需查询视图即可,不需要再写复杂的查询语句来查询数据. (4)删除视图: drop view 视图名称: 只是删除视图,不会删除表中的数据. 2.序列 序列的功能和auto_increment的功能相同,主要用于提供主键的值,序列输一个数组,存储在内存中,可以提高访问效率. (1)序列的定义: CREATE S

oracle表和对象基础维护笔记

一 oracle表和对象基础维护笔记 1.1 常见概念 1.2 创建表 1.3 表常见字段 1.4 增加或删除字段 1.5 更新字段 1.6 重命名表 1.7 改变表存储表空间和存储参数 1.8 删除表 1.9 表注释 1.10 分区表的管理 1.11 常用数据字典 二 约束 2.1 非空约束 2.2 主键约束 2.3 唯一性约束 2.4 外键约束 2.5 约束管理 三 索引 3.2 创建索引 3.3 改变索引存储参数 3.4 重建索引 3.5 索引碎片整理 3.6 删除索引 3.7 数据字典

东软实习之数据库(12)——序列、索引、同义词

#序列 序列的概念 序列是一种用于产生唯一数字列值的数据库对象,一般使用序列自动地生成主码值或唯一键值,序列可以是升序或降序. 序列特点: 可以自动产生唯一数值; 可被多个用户共享: 典型应用是生成主键值,用于标识记录的唯一性: 使用缓存加速序列的访问速度. #创建序列语法 创建序列,必须有CREATE SEQUENCE或CREATE ANY SEQUENCE权限.  序列被创建后,可以通过查询数据字典视图USER_SEQUENCES查看序列信息. 创建序列 sequence 序列产生器的名称

Oracle数据库对象_同义词

同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化SQL语句的书写. 同义词的概念和类型 利用同义词可以为用户的一个对象,或者其他用户的一个对象定义别名,从而简化命令或程序的书写,在命令或程序中可以直接使用同义词代替原来的对象. 可以为表.视图.存储程序.序列等对象建立同义词,也可以为一个同义词再建立同义词,甚至可以为一个不存在的对象建立同义词,系统仅仅在使用同义词时才验证它所代表的对象是否存在.同义词本身并不包含原对象中的数据或代码,它的作用仅仅相当于一个指

Oracle——序列、索引、同义词

一.常见的数据库对象 二.序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 ①.创建序列 CREATE SEQUENCE sequence [INCREMENT BY n] --每次增长的数值 [START WITH n] --从哪个值开始 [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] --是否需要循环

Oracle基础实训

一.Oracle基础SQL练习 班级表:班级编号(主键.标识列).班级名称.班主任.开班日期老师表:老师编号(主键.标识列) .姓名.性别(默认值‘男’).身份证号(必须是18位数字).联系电话学生表:学号(主键.固定五位数字) .班级编号.姓名.性别.出生日期.联系电话.家庭地址成绩表:编号(主键.标识列) .学号.科目名称.分数 1.表格创建 create table();语法 CREATE TABLE [schema.]table (column datatype [DEFAULT exp

Oracle基础学习5-- Oracle权限之”角色”

任何与权限相关的东西都少不了"角色"的概念,Java如此,.Net如此,Oracle当然也不例外. 角色其实就是权限的集合,将多个权限打包到一个角色中,这样每个角色有特定的权限.当需要给某个对象赋予某种权限时,就找到具有相应权限的角色,然后将它加到这个集合当中.下面就简单看看Oracle中角色的运用. 上篇文章讲到,为了给多用户授予各种权限,我们用到了"权限传递"来代替给用户们一个个授权,简化了授权过程.但这种方式较之用"角色"方式授权还是有很多