oracle DDLsql语句字段效率&索引

sql语句的执行顺序:
FROM–>JOIN–>WHERE–>GROUP–>HAVING–>DISTINCT–>ORDER–>TOP(limit);

where条件字段的效率:

给任职日期超过10年的人加薪10%;
select e.empno,e.ename,e.sal*1.1 “加薪后薪水” from emp e
where (months_between(sysdate,e.hiredate)/12)>10;

select e.empno,e.ename,e.sal*1.1 “加薪后薪水” from emp e
where e.hiredate < add_months(sysdate ,-120);

这两个sql语句哪个效率更高呢?
第二句的效率更高!
原因:第一句的where条件中对表中的字段进行了运算。这样在查询的过程中,每查出一行记录都要对此字段进行一次运算。
而第二句sql语句把运算与字段分离。在查询过程中对应的运算只进行一次,而后每查出一行记录直接拿对应的字段与之比较,并不用进行多余的运算。
这也是一种优化sql的手段,把与字段有关的运算想办法剖离出来。

oracle中做CRUD时事务需要手动提交
这里写图片描述

视图注意:

把一条查询语句创建成一个视图:create view 视图的名称 as sql语句;
这时对视图进行修改操作后,再进行查询会发现数据改变了,再查询原表数据也改变了。
原因是视图不存储数据,所做的一切都是在原表的基础上进行操作。
那么如何避免自己的视图被修改呢?
———–只读视图—————-
create view v4 as select * from v_emp with read only;

视图的效率很低,没有之一。但是非常非常方便。

索引注意:

表结构添加索引后,可以大幅度提高查询的速度效率,非常明显!
创建索引:
create index stu_index on 表名(字段名);
原理就像是字典一样,索引就是目录,没有索引找数据就要一条一条的找。但是有索引后就可以直接根据索引找到对应的数据。
所以创建索引所对应的字段就有相应的要求,

对谁创建索引?
1.表查询的概率远高于增删改的概率
2. 经常出现在where 条件后的字段
3.唯一性较强的字段

既然索引这么方便为什么oracle不把索引做成默认的呢?
虽然查询速度快,但是要做修改操作的话,会更加消耗资源。因为修改某个字段的话,字段所对应的索引也要改变。

—-in or like ‘%%’ 字段*xxx 不走索引
所以in or like‘%%’ 查询条件的查询效率很低。
但是——-like ‘M%’ —-走索引,有局限性。

复合索引:
创建方法:create index 索引名称 on表 (列1,列2.。。)
select * from 表 where 列1=xxx and 列2=xxx;—-效率高 走索引

select * from 表 where 列2=xxx and 列1=xxx;—–效率低 不走索引
上面两个查询语句哪个效率高呢?
第一条sql语句效率高!因为第一条走索引,

主键约束 唯一约束 会自动创建索引

序列:
创建方法:create sequence 序列名称;
序列一般用于主键的递增:序列名.nextval

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值