进行结果集排序【排序一定是最后执行的,将所有查询的数据都执行完之后才进行,否则将失去排序的作用】
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】
>>数据备份之单表备份数据
备份表temp
insert into temp01 select * from temp;
如果没有temp01
create table temp01 as select * from temp;
文中有一部分是参照别人写的进行总结学习的,如果有什么错误的地方,欢迎大家指正,我会及时修改;
由于有一些其他的任务,暂时先写这些吧,后面会慢慢追加主键、外键、索引、视图的创建和使用,技术的东西只能一点一点来,加油!