zoukankan      html  css  js  c++  java
  • 【概念】为什么有时全表扫描比通过索引扫描效率更高

    Oracle SQL优化器可以判断出在某些情况下,使用全表扫描比使用索引扫描能更快的得到数据结果。
    有没有想过,她是怎么做到的呢?
    背后的原理是什么呢?

    举一个非常好理解的场景(scenario:通过索引读取表中20%的数据)解释一下这个有趣的概念:

    假设一张表含有10万行数据--------100000行
    我们要读取其中20%(2万)行数据----20000行
    表中每行数据大小80字节----------80bytes
    数据库中的数据块大小8K----------8000bytes
    所以有以下结果:
    每个数据块包含100行数据---------100行
    这张表一共有1000个数据块--------1000块

    上面列出了一系列浅显易懂的数据,我们挖掘一下这些数据后面的故事:

    通过索引读取20000行数据 = 约20000个table access by rowid = 需要处理20000个块来执行这个查询
    但是,请大家注意:整个表只有1000个块!
    所以:如果按照索引读取全部的数据的20%相当于将整张表平均读取了20次!!So,这种情况下直接读取整张表的效率会更高。很幸运,Oracle也是这么想的:)

  • 相关阅读:
    常用的adb命令
    Jmeter之计数器
    Jmeter跨线程组传递变量
    Jmeter的属性和变量
    Jmeter之关联——常用提取器
    Jmeter常用的逻辑控制器
    HDU 1262 寻找素数对 模拟题
    HDU 1431 素数回文 离线打表
    HDU 2553 N皇后问题
    HDU 2093 考试排名 模拟题
  • 原文地址:https://www.cnblogs.com/Jace06/p/7552937.html
Copyright © 2011-2022 走看看