Oracle的SQL优化

  • 当单个查询检索的行数不大于表总行数的10%时,建立索引是有效的
  • UNION ALL用于获得两个查询检索到的所有行,包括重复行;UNION用于获得查询检索到的所有不重复的行。因为 UNION删除了重复行,所以尽量使用UNION ALL
  • 避免隐式转换    错误示例:select * from df_formbill where id = '2';
  • 尽量使用exists 代替 IN。IN用于检查一个值是否包含在列表中,EXISTS与IN不同:EXISTS只检查子查询返回的行的存在性,而IN检查实际的值
    -- IN示例
    select * from dept where deptno NOT IN ( select deptno from emp );
    -- Exists示例
    select * from dept where not exists ( select deptno from emp where emp.deptno=dept.deptno);
  • 尽量使用Exists代替Distinct。DISTINCT用于禁止重复行的显示,DISTINCT在禁止重复行之前要排序检索到的所有行;EXISTS用于检查子查询返回的行的存在性,只要找到有一个存在就返回结果
    -- distinct示例1
    select  a.* from t2 a,(select distinct c1 from t1) b  where  a.c1=b.c1;
    -- distinct示例2
    select  distinct a.* from t2 a,t1 b where  a.c1=b.c1;
    --exists示例
    select * from t2 a where exists (select c1 from t1 b where a.c1=b.c1);

     

  • Count 如果有可以确定唯一的索引比如id,可以使用 count(id),如果这个表没有索引直接使用count(*)即可
    COUNT(*)与COUNT(列)比较
    无索引一样快
    有索引,且索引列的属性允许为空COUNT(列)快
    有索引,且索引列的属性不允许为空一样快
  •  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱梦君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值