`
boss5518831534
  • 浏览: 228276 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

oracle 语句优化总结

阅读更多
oracle 语句提高查询效率的方法
一、1:.. where column in(select * from ... where ...);
2:... where exists (select 'X' from ...where ...);
第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询
使用EXISTS,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间
Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中
二、避免使用having字句
避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。
三、
WHERE子句中的连接顺序
     ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾
四、SELECT子句中避免使用 ' * '
     当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 '*' 是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中,会将'*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。
五、用TRUNCATE替代DELETE
     当删除表中的记录时,在通常情况下,回滚段(rollback segments ) 用来存放可以被恢复的信息。如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。
     而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此很少的资源被调用,执行时间也会很短。
六、尽量多使用COMMIT
     只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少
     COMMIT所释放的资源:
     A、 回滚段上用于恢复数据的信息。
     B、被程序语句获得的锁。
     C、 redo log buffer 中的空间。
     D、ORACLE为管理上述3种资源中的内部花费。
七、统计记录行数
count(column)>count(1)>count(*)(从效率上对比) 网上有的说count(*)的效率要比count(1)要稍快,我个人认为count(1)的效率要快
八、当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。
九、模糊查询的时候 用内部函数instr()代替%
十、表连接时,吧数据量大的表作为基表
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics