Oracle笔记整理

 
rowid:一条记录的物理位置(一定唯一的,可用于删除重复记录)
dbms_rowid:
object_id->file_id-> block_id->row_id
block_id:最小I/O单位
Index记录了每条记录的rowid
create index testc1 on test (c1);
在test表的c1字段上建立一个testc1的索引。
Index->二叉排序树:叶子节点放的是key和rowid的对应关系
索引:
1.数据库对象-->user_indexs
2.Orcale用rowid来提高提取行记录的速度
3.通过快速路径访问方法来减少磁盘的I/O,从而实现快速数据定位
4.在物理上索引和表是独立的,逻辑上是相连的,drop table索引就不存在了,drop索引table还在,truncate table后索引结构没有了,但是索引本身存在。
5.索引的维护是系统自动做的。
索引维护的代价太高:尤其是DML中的update(先删除,在插入)代价最大
索引为select而生,牺牲了空间和维护为代价。
索引的创建:
自动创建:pk和uk建立。(唯一性索引)
手动建立:
建立索引的原则:
1.where子句中经常用到的,join 条件中(大表建立索引)
2.表大,查询的结构少
3.字段的值的重复率低
4.索引不维护空值,bitmap index维护空值
5. 
空值的问题:子查询, nvl ,排序,表达式, is not null
set timing on 设置语句执行时间
set autotrace on
sqlplus uname/pwd @jiaoben.sql
 
a. $ORACL_HOME/rdbms/admin/*plan*---> 普通用户执行
b. $ORACL_HOME/sqlplus/admin/plustrace ---> sysdba 执行
c. grant plustrace to username
d.
where 里不要写表达式,尽量不要用函数,否则索引用不了部分隐式数据类型转换 ( 与使用函数是一样的 ) ,所以尽量避免隐式数据类型转换发生。 is null 会做全表扫描。
like可以做全表范围内的扫描,开始的用字符,别用"%"。
基于函数的索引。函数转换要用在DML,也就是说在向表中录入数据时要录入干净的数据。
查询效率低的时候,先看是否做全表扫描。
 
能做DESC的table,view
dict        USER_VIEWS
View 相对于基表来说没有提高速度,但是操作简单了。View可以限制数据的访问,拼表(union,intersect,minus)。
union all 不会触发排序动作,union 要排重,所以要触发排序动作。如果union all和union结果相同,则要使用union all可以减少排序所带来的开销。
给view可以加约束。
复杂view可以用insted of 触发器来部分实现DML
with check option 设置插入条件(where 子句中的条件),不符合的就插入不进去。
with read only 只能做select
 
删除表后,相关的视图,函数,触发器,存储过程都会无效的。
 
full outer join: t1=t2(+) union t1(+)=t2
先做外连接,然后过滤。
过滤条件在内连接前先执行
 
sqlplus root/1234@ tarena20( 主机字符串 )
$ORACLE_HOME/network/admin
 
tnsnames.ora
文件中的:
tarena20={} 中的就是主机字符串。
 
Sqlplus uname/passwd ( 不需要网络监听,是在本机进程间通信 )
Sqlplus uname/passwd@ 主机字符串 ( 需要通过监听程序来连接 )
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值