B站黑马程序员视频:https://www.bilibili.com/video/BV1KJ411h7NH
1、直接本地连接
# 连接已有表空间
sqlplus wateruser/itcast@orcl
2、IP连接oracle
在sqlplus.exe所在目录下,执行如下命令:
sqlplus 表空间/用户名@//地址:1521/orcl(实例名/全局数据库名,每个oracle数据库可以创建多个实例)
sqlplus wateruser/itcast@//192.168.80.10:1521/orcl
索引是一种排好序的数据结构。索引是一种可以大大加快查询效率的数据结构。
索引是为查询服务的,为经常用来查询的那一个字段建立索引。
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进制,然后反着读二进制数据,生成另外一个数据,得到的数据会比较随机),可以将树的深度降低。
一个编码对应一张图片,首先拿到对应关系,上传一张图片,替换一个编码对应图片。
create index index_name on t_owners(housenumber) reverse;
和以上的索引都不同,上面的索引都是B Tree * 索引,B*树的数据结果。
位图索引不是树的数据结构,它是一个图,每一个条数据,就对应于图上的一个点
图中的查询,会将男,这个位图索引中的所有数据(ROWID),直接全部获取到,查询速度比B*树要快。
适用于:
优点:
字段的值越少,效率就越高,越节省空间。因为位图索引要为创建该索引的字段中的每一个值,都创建一张图,来存储记录对应的ROWID
效率比B*树数据结构的索引高,不用一层层的找,直接获取数据
缺点:
做范围查询,不会走索引,会逐行扫描。
create bitmap index index_name on t_owners(filed1, filed1...);
出现该问题原因可能是:未正确关闭数据库。(未关闭数据库情况下,直接关机)。
在cmd下执行:
sqlplus /nolog # 无序用户名密码登录
connect / as sysdba
startup force