作用:提高查询效率 (在创建表时,如果有主键或唯一约束,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
正常查询需要全表扫描
思考题