当前位置:Gxlcms > 数据库问题 > Oracle数据库操作---基础使用(二)

Oracle数据库操作---基础使用(二)

时间:2021-07-01 10:21:17 帮助过:23人阅读

比如: select 字段 from 表名/视图名 where 条件 group by (字段) having 条件 order by 字段

 

①先由from将所查询的表或视图中的数据进行整理;【整理顺序是从右往左进行,一般将数据量最小的表放在最右面,作为基表处理】

②再执行where子句的限定条件,进行数据的筛选;【筛选顺序从右向左进行,一般将表关联语句放在最左边,筛选条件放在右端,这样可以减小笛卡尔积,提升查询效率】

③执行group by将数据按你给的条件进行分组;

④使用聚合函数进行计算;

⑤执行Having子句筛选分组;

⑥计算所有的表达式;

⑦执行Orader by语句进行结果集排序【排序一定是最后执行的,将所有查询的数据都执行完之后才进行,否则将失去排序的作用】

oracle 语句提高查询效率的方法

  语句1: where column in(select * from ... where ...);

  语句2:... where exists (select ‘X‘ from ...where ...);

  第二种格式要比第一种格式的效率高。

  在Oracle中几乎可以将所有的IN关键字子查询改写为Exists的子查询。在使用Exists时,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时

间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果表存放在在一个加了索引的临时表中。

  避免使用Having子句,Having只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序,总计等操作。如果能通过where子句限制记录的数目,那就能减少这方面的开销。

SQL初级优化:

①选择最有效的表名顺序(只在基于规则的优化器中有效)

上面已经提到,Oracle的解析器是按照从右向左的顺序处理From子句中的表或索引的,

在由多个表名的情况下,建议将子句中最小数据量的表作为基础表(driving table)放在最右面,将被最先执行;

②Where子句中的连接顺序

Oracle采用自下向上,自右向左的顺序执行限制条件,所以,建议将表之间的连接写在where后面的紧挨着的位置,那些可以过滤掉最大数据量的条件写在where子句的末尾.

③Select子句中避免使用星号 *

④使用Exists替代IN、使用NOT Exists替代NOT IN;

⑤SQL语句用大写的;因为Oracle总是先解析SQL语句,将小写字母转换成大写字母【但是开发中,Mapper.xml中建议使用全小写字母去写,因为项目最终运行环境是Linux,如果xml文件中sql与pojo中的大小写不一致,会导致Linux环境中运行出错】

⑥避免在索引列上使用计算;

⑦用IN来替换OR【上面提到如果可以使用Exists的地方,使用Exists】

文中有一部分是参照别人写的进行总结学习的,如果有什么错误的地方,欢迎大家指正,我会及时修改;

由于有一些其他的任务,暂时先写这些吧,后面还会继续完善……

Oracle数据库操作---基础使用(二)

标签:drop   简单的   val   大数据量   span   基本   情况   行数据   pool   

人气教程排行