oracle 语句编写注意问题(初学者)

列索引(快) ——》全局索引 (慢)

  劣质sql及修改 :1> where 子句中使用了 is null | is not null
              (oracle不允许使用索引)
          2> where 子句前置通配符不能使用索引,降低查询速度
          3> order by 子句使用表达式
          4> NOT 使用单一的not 或 column <> parameter 不能使用索引
                应替换成 column<='parameter' or column>=parameter    就可以使用当前字段索引
          5> EXISTS 相比于IN的效率高 (遍历主表,主表通过关联子表的列名的值过滤信息)
            同样NOT EXISTS 比NOT IN 的效率高
          6> from 后查询两个表的时候 , 数据少的作为基础表 ,即 from tab1 tab2 base_tabs
              后查询3个表的时候,选择交叉表作为基础(被其他表引用的表,即关联其他两张表的)  
          7> where 子句连接顺序 自上而下 所以最大数据量条件的应至于where句末
          8> * 避免在select后面使用*,oracle会查数据字典获取所有列名
          9> 减少访问数据库次数      尽量使用decode函数方法 (相当于一条if)  
            decode可以结合order by 和group by 使用
          10> 删除重复记录方法
            delete from emp e where e.rowid >(select min(x.rowid) from rmp x where x.emp_no = e.emp_no)
          11> 多使用commit释放资源
          12> 计算记录条数,count(index) > count(*) > count(1) 无显著速度差异
          13> 减少对表的查询 (a,b)= (select a1,b1 from emp)
          14> 使用别名减少解析时间
          15> 采用表连接 效率高于 exists
          16> 使用in和union all替换or
          17> where后 order by 大数据范围滞后,小数据范围在前。
          18> 索引只能确定存在于表中
          19> ||连接字符串也将不实用索引
          20> 优化group by 在执行此命令之前,将不需要的记录过滤掉
          21> 表空间和索引至于不同的硬盘上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值