本帖最后由 我是楠楠 于 2018-5-28 15:18 编辑
四、同义词 (一)什么是同义词 同义词实质上是指定方案对象的一个别名。通过屏蔽对象的名称和所有者以及对分布式数据库的远程对象提供位置透明性,同义词可以提供一定程度的安全性。同时,同义词的易用性较好,降低了数据库用户的 SQL 语句复杂度。同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义词的应用程序可以继续运行而无需修改。 你可以创建公共同义词和私有同义词。其中,公共同义词属于 PUBLIC 特殊用户组,数据库的所有用户都能访问;而私有同义词包含在特定用户的方案中,只允许特定用户或者有基对象访问权限的用户进行访问。 同义词本身不涉及安全,当你赋予一个同义词对象权限时,你实质上是在给同义词的基对象赋予权限,同义词只是基对象的一个别名。 (二)创建与使用同义词 创建同义词的具体语法是: [AppleScript] 纯文本查看 复制代码 create [public] SYNONYM synooym for object; 其中 synonym 表示要创建的同义词的名称,object 表示表,视图,序列等我们要 创建同义词的对象的名称。 (三)案例 1.私有同义词 需求:为表 T_OWNERS 创建( 私有 )同义词 名称为 OWNERS 语句: [AppleScript] 纯文本查看 复制代码 create synonym OWNERS for T_OWNERS; 使用同义词: [AppleScript] 纯文本查看 复制代码 select * from OWNERS ; 查询结果如下: 2.公有同义词 需求:为表 T_OWNERS 创建( 公有 )同义词 名称为 OWNERS2: [AppleScript] 纯文本查看 复制代码 create public synonym OWNERS2 for T_OWNERS; 以另外的用户登陆,也可以使用公有同义词: [AppleScript] 纯文本查看 复制代码 select * from OWNERS2 ; 五、索引 (一)什么是索引 索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。 索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID) (二)普通索引 语法: [AppleScript] 纯文本查看 复制代码 create index 索引名称 on 表名(列名); 需求:我们经常要根据业主名称搜索业主信息,所以我们基于业主表的 name 字 段来建立索引。语句如下: [AppleScript] 纯文本查看 复制代码 create index index_owners_name on T_OWNERS(name) 索引性能测试: 创建一个两个字段的表 [AppleScript] 纯文本查看 复制代码 create table T_INDEXTEST (
ID NUMBER,
NAME VARCHAR2(30)
); 编写 PL/SQL 插入 100 万条记录(关于 PL/SQL 我们在第四章会学到) [AppleScript] 纯文本查看 复制代码 BEGIN
FOR i in 1..1000000
loop
INSERT INTO T_INDEXTEST VALUES(i,'AA'||i);
end loop;
commit;
END; 创建完数据后,根据 name 列创建索引 [AppleScript] 纯文本查看 复制代码 CREATE INDEX INDEX_TESTINDEX on T_INDEXTEST(name) 执行下面两句 SQL 执行 [AppleScript] 纯文本查看 复制代码 SELECT * from T_INDEXTEST where ID=765432;
SELECT * from T_INDEXTEST where NAME='AA765432'; 我们会发现根据 name 查询所用的时间会比根据 id 查询所用的时间要短 (三)唯一索引 如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这是我们可 以创建唯一索引。 语法: [AppleScript] 纯文本查看 复制代码 create unique index 索引名称 on 表名(列名); 需求:在业主表的水表编号一列创建唯一索引 语句: [AppleScript] 纯文本查看 复制代码 create unique index index_owners_watermeter on
T_OWNERS(watermeter); (四)复合索引 我们经常要对某几列进行查询,比如,我们经常要根据学历和性别对学员进行搜 索,如果我们对这两列建立两个索引,因为要查两棵树,查询性能不一定高。那 如何建立索引呢?我们可以建立复合索引,也就是基于两个以上的列建立一个索 引 。 语法: [AppleScript] 纯文本查看 复制代码 create index 索引名称 on 表名(列名,列名.....); 根据地址和门牌号对学员表创建索引,语句如下: [AppleScript] 纯文本查看 复制代码 create index owners_index_ah
on T_OWNERS(addressid,housenumber); (五)反向键索引 应用场景:当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子 树。这样会增加查询的层数,性能会下降。建立反向键索引,可以使索引的值变 得不规则,从而使索引树能够均匀分布。
语法: [AppleScript] 纯文本查看 复制代码 create index 索引名称 on 表名(列名) reverse; (六)位图索引 使用场景:位图索引适合创建在低基数列上 位图索引不直接存储 ROWID,而是存储字节位到 ROWID 的映射 优点:减少响应时间,节省空间占用 语法: [AppleScript] 纯文本查看 复制代码 create bitmap index 索引名称 on 表名(列名); 需求:我们在 T_owners 表的 ownertypeid 列上建立位图索引,语句: [AppleScript] 纯文本查看 复制代码 create bitmap index index_owners_typeid
on T_OWNERS(ownertypeid) 六、总结 (一)知识点总结 (二)上机任务布置 基于 scott 用户联系各种数据库对象的创建。 因为 scott 用户权限较低,而创建各种数据库对象需要较高权限,所以需要赋予 [img=794,58] scott 用户 dba 权限 [AppleScript] 纯文本查看 复制代码 grant dba to scott 1. 创建视图 view_emp,显示雇员表中的 EMPNO ENAME JOB 2. 创建带约束的视图 view_emp30,显示部门编号为 30 的雇员信息。 3. 创建只读视图,显示部门表中的信息。 4. 创建物化视图(自动刷新),显示雇员编号、雇员名称、雇员职位和雇员部 门。 5. 创建物化视图(手动刷新),查询列出各部门的部门名和部门经理名字。并 编写手动刷新命令。 6. 编写序列 seq_1 ,从 100 开始 ,增长 10 ,最大值 1000,最小值 10 ,循环 。 7. 编写序列 seq_2 ,最大值 100 ,最小值 5,增长值 5 ,不循环。 8. 编写序列 SEQ_EMP, 起始值 8000,增长 1 ,不循环,不缓存。 9. 编写序列 SEQ_DEPT, 起始值 50,增长 10 ,不循环,缓存 30。 10. 根据雇员名称对雇员表建立索引 11. 根据部门编号和职位对雇员表建立索引 12. 在奖金表根据职位建立位图索引 13.为 EMP 表创建私有同义词 14.为 DEPT 表创建公有同义词 【郑州校区】Oracle-day03 中传智播客·黑马程序员郑州校区地址 河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话0371-56061160 / 61/62 来校路线地铁一号线梧桐街站A口出 |