`
lirig
  • 浏览: 235505 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一些简单的oracle查询优化

阅读更多

一些简单的oracle查询优化

 

  • 使用where过滤行
    如果查询数据时禁止用程序过滤数据,尽量在sql中过滤数据。例如 查询性别为男的用户记录,一定要在where条件中过滤记录不能通过查询所有结果后在程序里面过滤
  • 使用表连接而不是多个查询
    在涉及到查询多个时,尽量使用表之间的连接进行查询,不要单独进行查询,然后再通过程序把结果集合起来。
  • 执行连接时使用完全限定的列引用
    在查询中包含表的别名,并为查询所引用的每列制定合适的别名,这样查询就不需要去查询表的列。
  • 使用CASE表达式而不是多个查询
    当要对一个表的相同自行许多计算时,使用CASE表达式而不是用多个查询
    Select 
    Cont(case when price <13 then 1 else null end )  low,
    Cont(case when price  between    13 and 15  then 1 else null end ) med,
    Cont(case when price >13 then 1 else null end ) high
     from table
  • 增加表索引
    1.要对指定的查询条件创建索引,但是在查询中用到 like '%name%' 是不走索引的尽量采用 like '%name' or like 'name%' 。
    2.创建函数索引
    如果查询条件为通过函数查询 例如 where name =Upper('AaBbCcDd')  ,这样要创建Upper(name)索引
    3.内容经常重复的字段不能建索引,例如性别之类的字段,里面的数据重复几率太大,不用创建索引。
  • 使用WHERE而不用HAVING
    Where用于过滤行,having用于过滤组,因为行被分组后,having才能过滤组,所以尽量用where过滤
  • 使用exists而不用IN
     因为Exists只检查行的存在,而in检查实际值。
  • 使用相同的SQL
    如果执行相同,oracle会使用缓存里面的数据,使用的SQL 必须绝对相同
    所有字符必须相同
    大小写要相同
    空格要相同

上面为一些简单的oracle SQL 注意地方。其实oracle优化还有很多,例如怎么去创建表空间,表空间怎么发布,怎么去创建索引,索引处理,怎么应用oracle的缓存,还有oracle独有的基于成本的优化等。这里面就大有学问了,希望大家一起交流。

 

2
0
分享到:
评论
3 楼 dingjun1 2010-04-01  
lirig 写道


都走索引,不过查询的结果和like '%name%'不一样


我做了个实验,

create index t_ryzhxm on t_zzjg_ryzh(c_xm);
1、select * from t_zzjg_ryzh where c_xm like '吴%'
是会对索引进行范围扫描

2、select * from t_zzjg_ryzh where c_xm like '吴%' or c_xm like '%吴'
是全表扫描

3、select * from t_zzjg_ryzh where  c_xm like '%吴'
也是全表扫描(估计建一个反序索引,应该能范围扫描)
=======================================================
还是说我建索引的方式和你说的不一样?
2 楼 lirig 2010-04-01  
dingjun1 写道
1、使用CASE表达式而不是多个查询
这种用法对我个人来说很新颖,记下了。


like '%name%' 和like '%name' or like 'name%'有点疑问

like '%name%'是全表扫描,
但是ike '%name' or like 'name%'应该只有其中一个能走索引,另一个还是会全表扫描吧。
不会又创建一个反序索引又创建一正向的索引吧。


都走索引,不过查询的结果和like '%name%'不一样
1 楼 dingjun1 2010-04-01  
1、使用CASE表达式而不是多个查询
这种用法对我个人来说很新颖,记下了。


like '%name%' 和like '%name' or like 'name%'有点疑问

like '%name%'是全表扫描,
但是ike '%name' or like 'name%'应该只有其中一个能走索引,另一个还是会全表扫描吧。
不会又创建一个反序索引又创建一正向的索引吧。

相关推荐

    Oracle查询优化改写技巧与案例 有教无类落落

    《Oracle查询优化改写技巧与案例》看点: # 字典式写作手法:不讲具体语法,没有简单知识堆砌,直接以案例形式讲技巧与案例 # 大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 # 50余...

    关于Oracle多表连接,提高效率,性能优化操作

    这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...

    oracle的sql优化

    oracle的sql优化方法 1.全表扫描和索引扫描  大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于&gt;100万数据表影响很大。  Oracle中通过RowID访问数据是最快的方式  对字段进行函数转换,或者前...

    ORACLE SQL性能优化

    ORACLE只对简单的表提供高速缓冲(cache buffering)这个功能并不适用于多表连接查询. 在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行...

    Oracle优化53解

    可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被...

    Oracle语句优化30个规则详解

     可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。  数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被...

    oracle优化笔记

    那 SQL2 如何优化,哦,好简单,就是在 name 列建一个索引就好了。索引在这条 SQL 中因为可以让应用少做事和不做事,最终到了速度大幅度提升,果然,优化后的执行速度从 原来的 20 秒缩减为 1 秒。 到此优化完毕,...

    oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况...

    ORACLE SQL性能优化系列

    可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询. 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能...

    Oracle入门很简单[张朝明].part2

    Oracle入门很简单[张朝明].part2.共2部分,这是第2部分。 本书从初学者的角度出发,由浅入深、循序渐进地介绍了oracle数据库开发的基础知识。书中对数据库基本理论及其在数据库开发过程中的应用也有详细介绍。书中也...

    oracle 入门很简单.zip

    第4章sQL查询.ppt 第5章SQL更新数据.ppt 第6章Oracle中的字符型及ppt 第7章Oracle中的数值型ppt 第8章Oracle中的日期型ppt 第9章Oracle中的复杂数据处理ppt 第10章Oracle中的控制语句.ppt 第11章视图ppt 第12章约速...

    oracle 性能优化

    oracle性能优化,简单明了,学习工作中非常有用

    Oracle数据库学习指南

    32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35.外部联接的用法 36.性能调试的一般问题 37.优化 38.优化调整Oracle 8i数据库(从操作系统) 39.在...

    Oracle入门很简单[张朝明].part1

    第2篇介绍了oracle pl/sql的基本知识,包括sql查询、更新数据、字符型处理、数值型处理、日期型处理、复杂数据处理、控制语句;第3篇以数据库对象为主线讲述了包括视图、约束、游标、触发器、序列、用户角色与权限...

    sql优化的建议

    sql大量查询优化方法的一些简单建议,对于数据库初学者有一定的帮助

    Oracle复杂视图优化案例分析

     Oracle的视图分为简单视图和复杂视图两种,简单视图是从单一的表中获取数据,其中不包含函数和数据组等,复杂视图是指在视图定义中包括了聚合函数、分析函数、用户自定义函数、多表关联、子查询等。此类视图在...

    oracle9i oracle11g oracle10g 性能调优 基础学习 视频地址

    TOAD for Oracle简单介绍视频教程 全集 12 oracle中的查询 12 1z0_032_03 12 1z0-033-04 BUFfer cache 12 1z0-033-05 12 1z0-033-02 诊断与调优工具 12 1z0-033-03-changed all 检查点工作机制 12 1z0-033-11(A)...

    oracle sql执行过程(流程图)

    5)选择优化器,不同的优化器一般产生不同的“执行计划” 6)选择连接方式,ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式。7)选择连接顺序,对多表连接ORACLE选择哪一对表先连接,选择这两表中...

    ORACLE数据库DBA面试集锦

    RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的执行路径来运行查询。  CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的...

Global site tag (gtag.js) - Google Analytics