oracle DDLsql语句字段效率&索引

xiaoxiao2021-02-28  121

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

转载请注明原文地址: https://www.6miu.com/read-56181.html

最新回复(0)