[推荐]数据库优化(sql优化)_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3637 | 回复: 0   主题: [推荐]数据库优化(sql优化)        下一篇 
骑着驴儿去编程
注册用户
等级:少校
经验:865
发帖:56
精华:2
注册:2013-2-1
状态:离线
发送短消息息给骑着驴儿去编程 加好友    发送短消息息给骑着驴儿去编程 发消息
发表于: IP:您无权察看 2013-2-6 11:00:09 | [全部帖] [楼主帖] 楼主

1. 选择最有效的表名顺序(仅适用于RBO模式)将表上记录最少的那个表置于FROM的最右端作为基表。Oracle会首先扫描基表(FROM子句中最后的那个表)并对      
记录进行排序
2. select 查询中避免使用'*',*被解析成具体的字段,浪费内存
3. 减少访问数据库的次数                                                                   
4. 使用DECODE函数来减少处理时间                               
-->使用decode函数可以避免重复扫描相同的行或重复连接相同的表
用Where子句替换HAVING子句                                                                                                   

-->尽可能的避免having子句,因为HAVING 子句是对检索出所有记录之后再对结果集进行过滤。这个处理需要排序,总计等操作                


-->通过WHERE子句则在分组之前即可过滤不必要的记录数目,从而减少聚合的开销


使用表别名 用EXISTS替代IN                                                                                  
    在一些基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,使用EXISTS(或NOT EXISTS)通常       
将提高查询的效率.         
合理使用索引以提高性能
    虽然使用索引能得到查询效率的提高,但是索引需要空间来存储,需要定期维护.尤其是在有大量DML操作的表上,任意的DML操作都将引起索
引的变更这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O 因此定期的重构索引是有必要的.

5.索引的情况:

WHERE  employee_id + 10 > 150;        -->索引列上使用了计算,因此索引失效,走全表扫描方式,避免在索引列上使用NOT运算或不等于运算(<>,=)                                


通常,我们要避免在索引列上使用NOT或<>,两者会产生在和在索引列上使用函数相同的影响。 当ORACLE遇到NOT或不等运算时,他就会停止
使用索引转而执行全表扫描。
WHERE  NOT ( deptno = 20 );
WHERE  deptno > 20 OR deptno < 20;
-->尽管此方式可以替换且实现上述结果,但依然走全表扫描,如果是单纯的 > 或 < 运算,则此时为索引范围扫描   


避免索引列上使用函数 此时索引失效,使用全表扫描。         
WHERE子句中的连接顺序
     ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
6.SELECT子句中避免使用 ' * '
     当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 '*' 是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中,会将'*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。
7.减少访问数据库的次数
     当执行每条SQL语句时,ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等等。由此可见,减少访问数据库的次数,就能实际上减少ORACLE的工作量。
8.使用DECODE函数来减少处理时间
9.使用表的别名(Alias)
用EXISTS替代IN.




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论