注意:查询、DM、事务(三大重点)

    1. 源数据(数据字典表)【oracle自带的】
      1. 不能进行DDL操作
      2. 也不能进行DM操作
      3. 对对象进行操作时可以
    2. 举例:大事务回滚(一般发生在非常特殊的场景下)
      1. oracle为了保护数据,会把之前做的动作全部重做一遍
      2. 伴随日志、锁等,导致性能影响
    3. 删字段(从表的角度)
      1. 把个块中寻找记录,并每条记录删除
      2. 把相关数据字典记录删除
    4. 数据规范
      1. 查询不用*,否则大数据集导致查询效率降低
      2. 进行运算时,先查询默认值是否为空,否则要使用nvl()等转换函数
      3. 日期的格式规范,全球化的日期,可能存在时区的问题
    5. 特殊
      1. 字符串使用between(界限问题)image.png
      2. 快速全索引扫描(oracle自动识别高级算法使用)image.png
      3. 隐式类型转换带来的不走索引
      4. 索引关键字是不存空值的(需使用特殊值代替或者用转换函数做索引【不建议,消耗资源】)image.png
      5. oracle的索引优先级(数字>字符串)【隐式类型转换不一定是有利的,有时候我们自己进行转换】image.png
      6. avg()和sum()/count()的坑(具体看需求,是否要算全体还是拿奖金的部分人)image.png
      7. RBU模式(手动定义处理逻辑)和CBU模式(自动选择高级算法)的区别【将索引字段的空值去掉就走索引,不去掉仍做全表扫描】image.png
      8. 除了union all,其他都会有排序动作的(影响性能)image.png
      9. sql查询质询顺序:
        1. from
        2. select(检查)
        3. where
        4. group by
        5. select(数据)
        6. having
        7. order by
      10. group by的常用函数(分组增强)
        1. rollup():小计、累计、总计image.pngimage.png image.png
        2. grouping sets(用的很少,通常用语复杂报表)image.png
      11. not in不能有null值,不然整个返回值都为空
      12. update相关子查询锁持续时间较长,要在空窗期使用
    6. 结合数据特征,来优化sql查询,不能因为性能好,而去抛弃数据准确性(子查询返回单条记录一定可以,多条记录得看具体需求和数据情况【如:一个人仅在一个部门,且该部门只有一个管理者】)
    7. with会做数据快照(如果手动建立with语句就不会执行自动优化)image.png