zoukankan      html  css  js  c++  java
  • sql性能优化

    性能优化
    全表扫描(多块读的size)数据量比较多的时候
    1,并行查询 2,多块读 3,索引全扫描
    row ID
    索引就是一个数据库对象,包含
    k值和row id的新表。
    OLTP:线上交易系统
    常见索引:B树索引(随着数据量的增大,右边节点也会随之增大,导致不平衡,产生分支节点,增加I/O)
    位图索引(适用于数据仓库中,增删改比较少的表中,需要整张表的信息。)
    好处:获取表的所有信息。获取row id的开始值和结束值。缺点:索引对增删改有影响,锁定两张表
    基于函数的索引(使用局限性比较大,使用率低。需要评估,)
    造成函数索引失效:1,外层套索引 2,做运算 3,模糊查询
    统计收集索引信息的时间:周内(凌晨 2-4点)周末()
    统计表信息,数据字典
    反向索引:

    收集T表统计信息:exec dbms_stats.gather_table_stats('SCOTT','T');
    新建表的统计信息为空
    索引不可见:alter index cust_id_idx invisible
    alter index cust_id_idx visible
    反向索引:为了避免热块效应(性能很低),引用反向索引,使用分块方法。
    缺点:不支持范围扫描,只能用于等值查询
    索引扫描类型 索引的唯一扫描 (索引值唯一,where判断=)
    索引的范围扫描 (读单块)
    索引跳跃扫描 (复合索引)
    索引快速全扫描(多块扫描)
    索引全扫描
    1,2索引常用

    2种优化访问路径
    1,全表扫描(对表中所有进行简单扫描,主要是在某个查询请求表的大部分块时,)
    2,索引访问路径(基于row id)
    数值小于百分之七会走索引


    undo
    ORA-01555 快照过旧(有大事务)updata事务太大,undo表空间存放不下,解决办法就是强制关闭可以终止事务。扩大undo表空间。
    undo 里面有前镜像。CTAS create table as select
    undo不能设成自动扩展
    索引全扫描
    产生索引全扫描的条件:
    order by 对应 id
    group by 对应 id
    索引快速全扫描:(同时访问多个块)
    索引本身包含查询中的所有列时,oracle执行索引快速全扫描。

    索引名称:(如何确定是否使用了 索引)
    alter index cust_id_idx monitoring usage;
    select index_name,monitoring,used from v$object_usage;
    避免使用索引:
    /*+NO_INDEX (有+号是提示,没有+号是注释)
    查看执行计划:
    explain plan for select * from emp where empno=‘7765’
    select * from emp(dbms_xplain_display)

    不走索引的情况
    索引列时不会有null(空值)的
    有不等式时不走索引,in或not in时不走索引。
    使用通配符时,模糊查询时不走索引。
    谓词中使用了空值时不走索引。
    查询中包含函数的时候不走索引。

    统计信息查询
    dbms 存储过程包

  • 相关阅读:
    源码探索笔记:ArrayList和LinkedList的源码
    Java多线程学习总结:初窥门径
    设计模式学习总结:责任链模式
    踩坑日记:行之Blog微信小程序开发过程中碰到的问题及处理方案(持续更新...)
    初识设计模式之模板方法模式
    初识设计模式之装饰者模式
    初识设计模式之建造者模式
    初识设计模式之适配器模式
    初始设计模式之原型模式
    初识设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/lswei/p/9622973.html
Copyright © 2011-2022 走看看