Oracle快速入门(序列、索引)

一、Oracle当中的序列

索引的优点
索引是与表相关的一个可选结构
一个表中可以存在索引,也可以不存在索引,不做硬性要求。


用以提高 SQL 语句执行的性能
快速定位我们需要查找的表的内容(物理位置),提高sql语句的执行性能。


减少磁盘I/O
取数据从磁盘上取到数据缓冲区中,再交给用户。
磁盘IO非常不利于表的查找速度(效率的提高)。


使用 CREATE INDEX 语句创建索引


在逻辑上和物理上都独立于表的数据


索引与表完全独立,表里的内容是我们真正感兴趣的内容,而索引则是做了一些编制 ,索引和数据可以存放在不同的表空间下面,可以存放在不同的磁盘下面。


Oracle 自动维护索引


当对一个建立索引的表的数据进行增删改的操作时,oracle会自动维护索引,使得其仍然能够更好的工作。

1、序列概念:

生成类似于 auto_increment 这种ID自动增长 1,2,2,3, 4,5…
auto_increment 这个是mysql

2、语法:create sequence 序列的名称

create sequence 序列的名称
start with 从几开始
increment by 每次增长多少
maxvalue 最大值 | nomaxvalue
minvalue 最小值 | nominvalue
cycle | nocycle 是否循环 1,2,3,1,2,3
cache 缓存的数量3 | nocache 1,2,3,4,5,6

3、创建一个1,3,5,7,9…30序列

create sequence seq_test1
start with 1    --从1开始
increment by 2   --每次增加两个
maxvalue 30  --最大值为30
cycle  --设置循环
cache 10; --缓存数量为10

4、如何从序列获取值

currval : 当前值

nextval : 下一个值

注意:currval 需要在调用nextval之后才能使用
select sql_test1.currval from dual;

在这里插入图片描述

5、序列用的最多的一种写法

默认从1开始,默认每次增加1,默认不循环,默认没有上限

create sequence seq_test2;
select seq_test2.nextval from dual;

每次增长1
在这里插入图片描述

6、创建一个新的序列并设置值

create sequence seq_test3
start with 1   --从1开始
increment by 2   --每次增加2
maxvalue 30  --最大值为30
minvalue 0   --最小值为0
cycle --设置循环
cache 10;  --缓存数量为10

虽然是从1开始的但是当循环到29的时候变为0
在这里插入图片描述

二、索引:相当于是一本书的目录,能够提高我们的查询效率

SQL 创建索引

1、cost CPU 调用次数
2、Cardinality 影响行数
索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o次数,而提高数据访问性能。

1、如果某一列,你经常用来作为查询条件,那么就有必要去创建索引,在数据量比较大的情况

2、语法:

create index 索引的名称 on 表名()

3、主键约束自带主键索引,唯一约束自带唯一索引

4、五百万数据测试

(1)创建一个表
create table wubaiwanshuju(
  name varchar2(30),
  address varchar2(20)
);
(2)插入500000 条数据
-- 插入500000条数据
declare 
begin 
       for i in 1..5000000 loop 
           insert into wubaiwanshuju values('姓名'||i,'地址'|| i);
       end loop;     
       commit;   
end;
(3)在没有添加索引的情况下,去查询 name='姓名3000000'

速度非常慢

select * from wubaiwanshuju where name='姓名300000';

2.063秒

在这里插入图片描述

(4)创建索引 name 再去查询,name='姓名3000000'

创建索引:对wubaiwanshuju表当中的name列创建索引

create index ind_wubaiwanshuju on wubaiwanshuju(name);

查询:

select * from wubaiwanshuju where name='姓名3000000';

在这里插入图片描述
只用了0.031秒
在这里插入图片描述

(5)在没有添加复合索引的情况下,在去查询,name='姓名3000000' and '地址3000000'
select * from wubaiwanshuju where name='姓名3000000' add address = '地址3000000';

在这里插入图片描述

在没有创建复合索引的情况下,name 和 address

在这里插入图片描述

(5)创建复合索引的情况下,再去查询

创建了复合索引name address

-- 创建复合索引的情况下,再去查询(在索引的基础上去建立索引)
create index ind_wubaiwan2 on wubaiwanshuju(name,address);

创建复合索引的方式查询数据

select * from wubaiwanshuju where name='姓名3000000' and address='地址3000000';

在这里插入图片描述

创建复合索引nameaddress

在这里插入图片描述

5、索引原理:btree balance Tree 平衡二叉树

在创建索引的时候:如果某列作为条件的时候,可以提高查询效率,但是修改时候,会变慢

在这里插入图片描述
在这里插入图片描述

索引创建好之后,过了一段时间,DBA都会去做一个事情重构索引

三、SQL的调优

1、查看执行计划F5

2、分析里面的cost和影响行数,想办法降低语句执行的条数

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/108434784
今日推荐