源无极

导航

 

 

作用提高查询效率 (在创建表时,如果有主键或唯一约束oracle会自动创建索引)
语法:create index 索引名称 on 表名(列名-可以指定多个列)
如果索引指定在多列上,组合索引,复合索引
 
测试索引
--创建表,插入500万数据,在表上建立索引来测试 建索引前后的查询速度对比
--1.创建测试表
create table lanpo1
(
       myid number(10) primary key,
       myname varchar2(30)
);

 --2.表中插入500万数据(10min 46s)

begin
  for i in 1..5000000
  loop
  insert into lanpo1 values(i,'测试数据'||i);
  end loop;
  commit;
end;

 --3.在未创建索引之前先查询一次 记录时间  1min 38s

select * from lanpo1 where myname = '测试数据4911234';

 

 --4.创建索引 

CREATE index index_lanpo1_name on lanpo1(myname) 

 

--5.在创建索引之后再查询一次 记录时间 对比效率 0.42s

select * from lanpo1 where myname = '测试数据4911234';

 6.--查看该用户下所有创建的索引

SELECT * FROM user_indexes

 

7.查看索引碎片

 

 8.经常执行这个操作数据比较多的时候

 

9.创建唯一索引

 

案例

 

CREATE UNIQUE INDEX lapoo on person2(name);
INSERT INTO person2(pid,name,age,birthday,sex) VALUES('1','lanpo',22,TO_DATE('2019-03-12','yyyy-mm-dd'),'');
INSERT INTO person2(pid,name,age,birthday,sex) VALUES('2','lanpo',23,TO_DATE('2019-05-12','yyyy-mm-dd'),'')

 

 报错

 

 

--总结:不需要建索引的情况
1.数据量太小就不要建立索引
2.如果当前表经常做修改(update insert delete)不会建索引

 3.索引和表物理空间上是独立的,对表进行,增删改查操作,oracle会自动维护索引

 

 补充 

 查询sal>1500

 正常查询需要全表扫描

 

 思考题

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2019-02-27 22:54  源无极  阅读(337)  评论(0编辑  收藏  举报