zoukankan      html  css  js  c++  java
  • 自作聪明的开发


    近日查看数据库执行较长的语句。发现我们这边的开发者真是厉害。顺手拈来就是hint。



    开发以为仅仅要走索引就是快的,并且刚好知道index hint能够强制走索引。所以就用上了。但是走的是bitmap index full scan,把整个索引都扫描了,然后依据索引的位图转化(bitmap conversion to rowids)成rowid,再依据索引的rowid和表的rowid一一相应。从表中取得数据(table access by index rowid)。

    既然是从索引中的全部rowid找到表中的全部的数据,为啥不直接扫描整个表,直接扫描整个表不是更快吗?事实上oracle也是非常聪明的。我把index  hint去掉之后。走得是全表扫描。这就对了。

    读索引是单块读,回表也是单块读。一次的单块读和多块读时间上是几乎相同的,显然多块读一次扫描的块数很多其它。

    我们把表当成是一本字典,通过拼音检索或者通过部首检索,可以很高速的定位某一个字在哪页。这就好比是索引扫描,通过索引。能高速定位你检索的数据在表中的位置。

    假设我们要找全部的字,假如有1w个字,显然,每个字都通过检索的方式,我们要找1w次。

    如果我们一页一页的找。如果一页有20个字。总共500页,我们要找500次就能找到1w个字。

    显然。找500次要比找1w次要快非常多。

    至于优化的话就简单了。去掉index hint就能够了。假设表大的话就加并行就ok了。



  • 相关阅读:
    团队选题报告
    第二次结对作业
    高级软件工程团队第一次作业
    第一次结队作业
    高级软件工程第二次作业
    高级软件工程第一次作业
    洛谷 题解 2165 [AHOI2009]飞行棋
    洛谷 题解 P1684 考验
    洛谷 题解 P4613 【[COCI2017-2018#5] Olivander】
    洛谷 题解 P5534 【【XR-3】等差数列】
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7230732.html
Copyright © 2011-2022 走看看