设为首页 收藏本站
查看: 1482|回复: 0

[经验分享] Oracle-day03 下

[复制链接]

尚未签到

发表于 2018-9-5 10:38:03 | 显示全部楼层 |阅读模式
  四、同义词
  (一)什么是同义词
  同义词实质上是指定方案对象的一个别名。通过屏蔽对象的名称和所有者以及对分布式数据库的远程对象提供位置透明性,同义词可以提供一定程度的安全性。同时,同义词的易用性较好,降低了数据库用户的 SQL 语句复杂度。同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义词的应用程序可以继续运行而无需修改。
  你可以创建公共同义词和私有同义词。其中,公共同义词属于 PUBLIC 特殊用户组,数据库的所有用户都能访问;而私有同义词包含在特定用户的方案中,只允许特定用户或者有基对象访问权限的用户进行访问。
  同义词本身不涉及安全,当你赋予一个同义词对象权限时,你实质上是在给同义词的基对象赋予权限,同义词只是基对象的一个别名。
  (二)创建与使用同义词
  创建同义词的具体语法是:
  create [public] SYNONYM synooym for object;
  其中 synonym 表示要创建的同义词的名称,object 表示表,视图,序列等我们要
  创建同义词的对象的名称。
  (三)案例
  1.私有同义词
  需求:为表 T_OWNERS 创建( 私有 )同义词 名称为 OWNERS
  语句:
  

  
create synonym OWNERS for T_OWNERS;
  

  使用同义词:
  

  
select * from OWNERS ;
  

  查询结果如下:
DSC0000.jpg

  2.公有同义词
  需求:为表 T_OWNERS 创建( 公有 )同义词 名称为 OWNERS2:
  create public synonym OWNERS2 for T_OWNERS;
  以另外的用户登陆,也可以使用公有同义词:
  

  
select * from OWNERS2 ;
  

  五、索引
  (一)什么是索引
  索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。
  索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID)
DSC0001.jpg

  (二)普通索引
  语法:
  create index 索引名称 on 表名(列名);
  需求:我们经常要根据业主名称搜索业主信息,所以我们基于业主表的 name 字
  段来建立索引。语句如下:
  create index index_owners_name on T_OWNERS(name)
  索引性能测试:
  创建一个两个字段的表
  

create table T_INDEXTEST (  
ID NUMBER,
  
NAME VARCHAR2(30)
  
);
  

  编写 PL/SQL 插入 100 万条记录(关于 PL/SQL 我们在第四章会学到)
  

BEGIN  
FOR i in 1..1000000
  
loop
  
INSERT INTO T_INDEXTEST VALUES(i,'AA'||i);
  
end loop;
  
commit;
  
END;
  

  创建完数据后,根据 name 列创建索引
  CREATE INDEX INDEX_TESTINDEX on T_INDEXTEST(name)
  执行下面两句 SQL 执行
  

SELECT * from T_INDEXTEST where>
SELECT * from T_INDEXTEST where NAME='AA765432';  


  我们会发现根据 name 查询所用的时间会比根据>  (三)唯一索引
  如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这是我们可
  以创建唯一索引。
  语法:
  create unique index 索引名称 on 表名(列名);
  需求:在业主表的水表编号一列创建唯一索引
  语句:
  

  
create unique index index_owners_watermeter on
  
T_OWNERS(watermeter);
  

  (四)复合索引
  我们经常要对某几列进行查询,比如,我们经常要根据学历和性别对学员进行搜
  索,如果我们对这两列建立两个索引,因为要查两棵树,查询性能不一定高。那
  如何建立索引呢?我们可以建立复合索引,也就是基于两个以上的列建立一个索
  引 。
  语法:
  create index 索引名称 on 表名(列名,列名.....);
  根据地址和门牌号对学员表创建索引,语句如下:
  

  
create index owners_index_ah
  
on T_OWNERS(addressid,housenumber);
  

  (五)反向键索引
  应用场景:当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子
  树。这样会增加查询的层数,性能会下降。建立反向键索引,可以使索引的值变
  得不规则,从而使索引树能够均匀分布。
DSC0002.jpg

  语法:
  create index 索引名称 on 表名(列名) reverse;
  (六)位图索引
  使用场景:位图索引适合创建在低基数列上
  位图索引不直接存储 ROWID,而是存储字节位到 ROWID 的映射
  优点:减少响应时间,节省空间占用
  语法:
  create bitmap index 索引名称 on 表名(列名);
  需求:我们在 T_owners 表的 ownertypeid 列上建立位图索引,语句:
  

  
create bitmap index index_owners_typeid
  
on T_OWNERS(ownertypeid)
  

  六、总结
  (一)知识点总结
  (二)上机任务布置
  基于 scott 用户联系各种数据库对象的创建。
  因为 scott 用户权限较低,而创建各种数据库对象需要较高权限,所以需要赋予
  [img=794,58]
  scott 用户 dba 权限
  

  
grant dba to scott
  


  • 创建视图 view_emp,显示雇员表中的 EMPNO ENAME JOB
  • 创建带约束的视图 view_emp30,显示部门编号为 30 的雇员信息。
  • 创建只读视图,显示部门表中的信息。
  • 创建物化视图(自动刷新),显示雇员编号、雇员名称、雇员职位和雇员部  门。

  • 创建物化视图(手动刷新),查询列出各部门的部门名和部门经理名字。并  编写手动刷新命令。

  • 编写序列 seq_1 ,从 100 开始 ,增长 10 ,最大值 1000,最小值 10 ,循环 。
  • 编写序列 seq_2 ,最大值 100 ,最小值 5,增长值 5 ,不循环。
  • 编写序列 SEQ_EMP, 起始值 8000,增长 1 ,不循环,不缓存。
  • 编写序列 SEQ_DEPT, 起始值 50,增长 10 ,不循环,缓存 30。
  • 根据雇员名称对雇员表建立索引
  • 根据部门编号和职位对雇员表建立索引
  • 在奖金表根据职位建立位图索引  13.为 EMP 表创建私有同义词
      14.为 DEPT 表创建公有同义词




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563476-1-1.html 上篇帖子: Oracle-day03 中 下篇帖子: Oracle执行计划之历史回归
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表