oracle初步学习笔记

B站黑马程序员视频:https://www.bilibili.com/video/BV1KJ411h7NH

连接oracle数据库

1、直接本地连接

# 连接已有表空间
sqlplus wateruser/itcast@orcl

2、IP连接oracle

在sqlplus.exe所在目录下,执行如下命令:

sqlplus 表空间/用户名@//地址:1521/orcl(实例名/全局数据库名,每个oracle数据库可以创建多个实例)

sqlplus wateruser/itcast@//192.168.80.10:1521/orcl

ORACLE中的索引

什么是索引?

索引是一种排好序的数据结构。索引是一种可以大大加快查询效率的数据结构。

普通索引

索引是为查询服务的,为经常用来查询的那一个字段建立索引。

1、创建索引:

create index index_owners_name on t_owners(name);

主键字段,会自动建立索引。

根据rowid查,比根据索引查询要快,因为rowid直接就是物理地址。

2、使用索引:

select  * from t_owners where name = '张哲';

3、性能测试 创建一个表,向表中插入100w条记录

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

begin
  for x in 1..1000000
    loop
      insert into T_INDEXTest values(x, 'AA'||x);
    end loop;
  commit;
end;

4、不同的条件查询效果

-- 创建索引
create index index_test on T_INDEXTEST(name);

select * from T_INDEXTEST where id = 765431; -- 慢
select * from T_INDEXTEST where name = 'AA765431'; --快
select ROWID, t.* from T_INDEXTEST t where name = 'AA765431'; -- 查询ROWID
select * from t_indextest where rowid = 'AAAM3jAAGAAAAlKAA5'; -- 更快一些
-- 根据索引查找,也要找到ROWID,ROWID是物理地址,oracle会为每一条记录创建一个ROWID

唯一索引

-- 创建唯一索引
create unique index index_owners_meter on t_Owners(watermeter);

复合索引

-- 经常使用如下条件查询:
select * from t_owners where addressid = 1 and housenumber = '1-3';
-- 创建复合索引
create index index_owners_ah on t_owners(addressid, housenumber);

复合索引字段的建立顺序,和查询顺序最好一直,不然效率不高?

反向键索引

对于一组排列连续的数据,它建立的索引是一种“歪脖子树”的形状,也可以说退化成链表,树的深度大大加深,降低查询效率。这时候建立反向键(把数据转换成2进制,然后反着读二进制数据,生成另外一个数据,得到的数据会比较随机),可以将树的深度降低。

一个编码对应一张图片,首先拿到对应关系,上传一张图片,替换一个编码对应图片。

oracle初步学习笔记_第1张图片

create index index_name on t_owners(housenumber) reverse;

位图索引

和以上的索引都不同,上面的索引都是B Tree * 索引,B*树的数据结果。

位图索引不是树的数据结构,它是一个图,每一个条数据,就对应于图上的一个点

oracle初步学习笔记_第2张图片

图中的查询,会将男,这个位图索引中的所有数据(ROWID),直接全部获取到,查询速度比B*树要快。

适用于:

  • 适合建立在低级数列上:也就是当前字段的值是有限的,比如性别(男女),颜色(红黄蓝。。有限),民族(56个)。

优点:

  • 字段的值越少,效率就越高,越节省空间。因为位图索引要为创建该索引的字段中的每一个值,都创建一张图,来存储记录对应的ROWID

  • 效率比B*树数据结构的索引高,不用一层层的找,直接获取数据

缺点:

  • 不能做范围查询,只能用做等值查询,因为数据库并不知道,建立的每张图之间的关系

    oracle初步学习笔记_第3张图片

做范围查询,不会走索引,会逐行扫描。

create bitmap index index_name on t_owners(filed1, filed1...);

问题1:ORA-27101: shared memory realm does not exist

出现该问题原因可能是:未正确关闭数据库。(未关闭数据库情况下,直接关机)。

在cmd下执行:

sqlplus /nolog # 无序用户名密码登录
connect / as sysdba 
startup force

你可能感兴趣的:(Oracle,oracle,学习,数据库)