ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle sql tuning 9--理解优化器访问路径

oracle sql tuning 9--理解优化器访问路径

原创 Linux操作系统 作者:oracle_db 时间:2010-03-19 23:33:46 0 删除 编辑

访问路径:说是是如何从数据库中取数据,一般说来对于表的小部分数据用到索引访问,对于访问表的大部分数据全表扫描更有效。

在OLTP系统中,有些SQL是小的[我理解为操作数据量不大的]那些SQL,可用索引来访问,相反在 Decision support systems中,使用分区表,全表扫描相关分区或许更好。

需要了解以下访问路径:

  • Full Table Scans

  • Rowid Scans

  • Index Scans

  • Cluster Access

  • Hash Access

  • Sample Table Scans

  • How the Query Optimizer Chooses an Access Path

    Full Table Scan?

  • 这种扫描方式过虑掉那些SELECT中不需要的数据,读取表中所有行,当执行全表扫描的时候,表中所有在高水位标记下的块被扫描,高水位标记暗示了表使用的空间情况.或者说空间被表中数据格式化.每一行都被检查,以发现表中数据是不是和where条件中的相符。

    当oracle执行全表扫描的时候,所有的块被顺序读.I/O calls larger than a single block can be used to speed up the process. 参DB_FILE_MULTIBLOCK_READ_COUNT决定读取块的大小.使用多块读全表扫描将更有效。每一个块只读一次.

    为什么说全表扫描在访问大数据量的时候很有效?

    因为全表扫描使用比较大的IO调用,这种大的IO调用,比调用多个小的IO花费的代价要小些[原文:This is because full table scans can use larger I/O calls, and making fewer large I/O calls is cheaper than making many smaller calls]

    那么何时使用全表扫描呢?

    1.缺少索引

    如果查询语句中没有使用到现在的索引,就会用全表扫描.如果说索引列上使用了索引,那么优化器也会执行全表扫描。比如:upper(index列)

    2.访问数据量很大时

    当优化器认为:你要取的数据,将需要访问表中的绝大多数块时,它就会走全表扫描。尽管如此,通过索引来访问往往更好.

    3.足够小的表

    当表包含的块数据小于参数DB_FILE_MULTIBLOCK_READ_COUNT 的大小,在高水位标记以下。一次IO操作就可以把表中数据读取,这个时候全表扫描就很有效。

    4. high degree of parallelism

    A high degree of parallelism for a table skews the optimizer toward full table scans over range scans. Examine the DEGREE column in ALL_TABLES for the table to determine the degree of parallelism.

    5.使用hint full(table 别名)强制优化器走全表扫描.

    6.并行查询的时候

    当全表扫描的时候,响应时间可以通过并行这个特点来缩小。并行查询一般应用于数据仓库环境.

    Rowid Scans?

    表中第一行的ROWID指定的该行的数据文件,块(包含该行在块中的位置).通过rowid来定位表中数据是最快的,因为数据库中第一行确切的位置是指定好的。

    当使用rowid方式来访问表的时候,ORACLE先获取SELECT语句中那些行的ROWID,通过WHERE条件或者是索引扫描,然后定位选择的每一行.

    index scans?

    这种方式下,一行数据被取回,通过语句中指定的索引。为了进行索引扫描,ORACLE查找索引列上的索引,如果语句访问的只是索引列,那就直接读取索引

     

     

  • 来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15720542/viewspace-629974/ ,如需转载,请注明出处,否则将追究法律责任。

    请登录后发表评论 登录
    全部评论

    注册时间:2008-11-13

    • 博文量
      158
    • 访问量
      354229