oracle
同义词:使用对象(Table,View,同义词)的一个别名,不占用任何实际的存储空间,只是在Oracle的数据字典中保存其定义描述,在使用同义词时,Oracle会将其翻译为对应对象的名称。
作用:屏蔽对象的名字及其持有者,为用户简化SQL语句
01、分类
私有同义词
私有同义词只能在其模式内访问,且不能与当前模式的对象同名
公有同义词
公有同义词可被所有的数据库用户访问
02.创建私有同义词
1.用system账户登录,让scott具有创建同义词权限
grant create synonym to scott;
2.用scott账户登录,create synonym dp for scott.dept;
3.将查询dept的权限授予s2220这个用户
GRANT SELECT ON dept to s2220
4.在s2220模式下访问同义词
这个时候访问不到
03.创建公有同义词
===========================================================
| 在scott模式下创建dept表的公有同义词 dp
===========================================================
--使用SYSTEM用户登录,scott获得创建公有同义词权限
GRANT CREATE PUBLIC SYNONYM TO scott;
--在scott模式下创建公有同义词dp作为scott用户dept表的别名
CREATE PUBLIC SYNONYM dp FOR dept;
--将查询dept的权限授予public角色。
GRANT SELECT ON dept TO PUBLIC;
--在s2220模式下访问公有同义词
SELECT * FROM dp;
04.查看某张表的同义词
SELECT * FROM SYS.ALL_SYNONYMS WHERE table_NAME='DEPT'
05.删除同义词
drop synonym dp
下面是 具体的代码示例:
------私有同义词
grant create synonym to scott
create synonym ee2 for scott.emp
grant select on scott.emp to sll
select * from ee2
SELECT * FROM SYS.ALL_SYNONYMS WHERE table_NAME='EMP'
SELECT * FROM ee2
--删除同义词
drop synonym ee
----------公有同义词
----------------------------------
---system
grant create public synonym to scott
create public synonym ee1 for scott.emp
---scott
grant select on scott.emp to public
SELECT * FROM SYS.ALL_SYNONYMS WHERE table_NAME='EMP'
--sll
SELECT * FROM ee1
索引:分类
语法:
CREATE [UNIQUE] INDEX index_name ON tablename(column_list)
[TABLESPACE tablespace_name];
01.B树索引
Index entry 的组成部分:
Indexentry entry header 存放一些控制信息。
Key column length 某一key的长度
Key column value 某一个key 的值
ROWID 指针,具体指向于某一个数据
02.反向键索引
与常规索引相反,反向键索引在保持列顺序的同时反转索引列的字节。反向键索引通过反转索引键的数值来实现。优点:对于连续增长的索引列,反转索引列,可以将索引数据分散在多个索引块间,减少I/O瓶颈的发生。
反向键索引通常建立在一些值连续增长的列上,如系统生成的员工编号。
03.位图索引
位图索引的优点在于,它最适于低基数列(该列的值是有限的,理论上不会是无穷大)。例如,员工表中的工种(job)列,即便是几百万条员工记录,工种也是可计算的。类似的还有图书表中的图书类别类等。
分析:位图索引使用方面,和B*索引有很大的不同。B*索引的使用,通常是从根节点开始,经过不断的分支节点比较到最近的符合条件叶子节点。通过叶子节点上的不断Scan操作,“扫描”出结果集合rowid。
而位图索引的工作方式截然不同。通过不同位图取值直接的位运算(与或),来获取到结果集合向量(计算出的结果)。
索引的实:
/*
---------------索引
*/
select * from employee
--1.创建B树索引
create index indexemployee on employee(sal)
--2.唯一索引
create unique index inndex_unique_sal on employee(comm)
--3.创建反向键索引
create index indexe on employee(deptno) reverse;
--4.位图索引
create bitmap index index_bit on employee(job)
--5.其他索引(大写函数索引)
create index index_ename on employee(upper(ename));
------------
---删除索引
drop index inndex_unique_sal;
---重建索引 将反向索引改为B树索引
alter index indexe rebuild noreverse
分区表:(主要是范围分区,间隔分区)
01.什么是分区表
解析:Oracle允许用户把一个表中的所有行分为几个部分,并将这些部分存在不同的位置。被分区的表称为分区表,分区表的每个部分称为一个分区。
02.分区表的优点
改善查询性能
表更容易管理
便于备份和恢复
提高数据安全性
03.分区表的设定原则
数据大于2GB,已有数据和新添加数据有明显的界限划分。
04.分区表的分类
解析:
范围分区
列值的范围作为划分条件
散列分区
列的hash值自动分配
列表分区
列值必须明确指定
一个分区列
复合分区
先按第一分区方法分区
再按第二分区方法划分子分区
其他分区
虚拟分区
间隔分区
05.范围分区
1.范围分区
--1。范围分区
create table sales1
(
sales_id number,
product_id varchar2(5),
sales_date date not null
)
insert into sales1 values(1,'哈哈',to_date('2013-05-5','yyyy-MM-dd'));
insert into sales1 values(2,'哈哈1',to_date('2013-08-5','yyyy-MM-dd'));
insert into sales1 values(3,'哈哈2',to_date('2013-02-5','yyyy-MM-dd'));
insert into sales1 values(4,'哈哈3',to_date('2013-12-5','yyyy-MM-dd'));
partition by range(sales_date)
(
partition p1 values less than(to_date('2013-04-1','yyyy-MM-dd')),
partition p2 values less than(to_date('2013-07-1','yyyy-MM-dd')),
partition p3 values less than(to_date('2013-10-1','yyyy-MM-dd')),
partition p4 values less than(to_date('2014-01-1','yyyy-MM-dd')),
partition p5 values less than(maxvalue)
);
drop table sales1
----查询数据 p3区的
select * from sales1 partition(p3)
---删除p3区的数据
delete from sales1 partition(p3)
2.间隔分区
---------------2.间隔分区
create table sales2
(
sales_id number,
product_id varchar2(5),
sales_date date not null
)
partition by range(sales_date)
interval(numtoyminterval(3,'Month'))
(partition p1 values less than (to_date('2013-04-1','yyyy-MM-dd')));
----插入数据
insert into sales2 values(1,'a',to_date('2013-08-1','yyyy-mm-dd'));
---获得分区情况
select table_name,partition_name from user_tab_partitions
where table_name=upper('sales2')
---查询分区数据
select * from sales2 partition(sys_p21)