时间: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