oracle索引和数据库完整性

来源:互联网 发布:网络编辑培训课程 编辑:程序博客网 时间:2024/06/07 04:50
1.索引的原理

类似于字典中查找数据:两种方式,1.通过逐页查找,效率低。2.通过检索目录,直接定位,效率高。
索引就是对要查找数据的目录。当对数据建立索引后,oracle会开辟新的存储空间为索引,并且把所有值和rowid存储其中,
当查找的某个信息含有索引时,oracle便改为查找索引,找到其对应的rowid,然后根据rowid检索到对应的信息。

--创建测试表
create table test as select * from all_objects;
select * from test;
select count(1) from test;
  COUNT(1)
----------
     53817
--创建索引
create index index_test_name
on test(object_name);

create index index_test_owner
on test(owner);

drop index index_test_owner;

select * from test where object_name='PEOPLE';
select * from test where owner='SYS';
select * from all_tables;
object_name:
未创建索引时:在pl/sql中按F5查看执行计划花费的基数为9
创建索引后:在pl/sql中按F5查看执行计划花费的基数为1
注意:只能对已有索引的列搜索时才会走索引查询

分析insert delete update数据时对索引的影响
insert:插入新的数据时不光要对新数据进行insert操作,而且需要对索引列进行重新分块,这样一来由于insert带来的索引花销会是普通insert花销的数倍。
delete:删除数据后,索引中该数据会被标记为删除,同时也依旧占用着索引块的空间,造成了空间的浪费。
update:修改的数据在索引块中会被标记为删除,而后在最后变为该数据建立一个新的索引,但这样会带来新的空间浪费。

索引的使用时机:
①.不适合小数据量的表
②.频繁select的信息应该建立index,而对频繁insert,delete,update的数据不应该建立index

注意:
1.对索引列使用函数不会走索引
2.对索引列使用<>不会走索引
3.如果为联合索引,那么只查询索引列的某一列也不会走索引

2.数据库完整性约束以及利用约束保证数据的完整性


①实体完整性 entity integrity
表中含有标识该条记录的唯一标识,一般为主键
【通过primary key保证。】

②参照完整性 referential integrity
表之间的关系。如:每个客户都有与之对应的订单表,如果某个订单没有与之对应的客户信息,那么该条订单就不符合参照完整新。
【通过外键保证。】

③域完整性 domain integrity
指表中列的属性。包括,数值范围,约束条件,空和非空等
【通过not null,null,unique保证】

④用户自定义完整性 user-defined integrity
如:订单只有有效和无效两种状态。
【通过check(status in ('有效','无效'))】













原创粉丝点击