動若狡兔,靜如處子

          by doctor

          統計

          留言簿

          閱讀排行榜

          評論排行榜

          oracle優化

          記錄點常識:
             1、為實現全表掃描,Oracle讀取表中所有的行,并檢查每一行是否滿足語句的WHERE限制條件一個多塊讀操作可以使一次I/O能讀取多塊數據塊 (db_block_multiblock_read_count參數設定),而不是只讀取一個數據塊,這極大的減 少了I/O總次數,提高了系統的吞吐量,所以利用多塊讀的方法可以十分高效地實現全表掃描,而且只有在全表掃描的情況下才能使用多塊讀操作。在這種訪問模 式下,每個數據塊只被讀一次。
             2、先通過index查找到數據對應的rowid值(對于非唯一索引可能返回多個rowid值),然后根據rowid直接從表中得到具體的數據,這 種查找方式稱為索引掃描或索引查找(index lookup)。一個rowid唯一的表示一行數據,該行對應的數據塊是通過一次i/o得到的,在此情況下該次i/o只會讀取一個數據庫塊。
            在索引中,除了存儲每個索引的值外,索引還存儲具有此值的行對應的ROWID值。
            索引掃描可以由2步組成:
            (1) 掃描索引得到對應的rowid值。
           ?。?) 通過找到的rowid從表中讀出具體的數據。
            每步都是單獨的一次I/O,但是對于索引,由于經常使用,絕大多數都已經CACHE到內存中,所以第1步的 I/O經常是邏輯I/O,即數據可以從內存中得到。但是對于第2步來說,如果表比較大,則其數據不可能全在內存中,所以其I/O很有可能是物理I/O,這 是一個機械操作,相對邏輯I/O來說,是極其費時間的。所以如果多大表進行索引掃描,取出的數據如果大于總量的5% —— 10%,使用索引掃描會效率下降很多

          然后對于特殊的業務場景要先做數據的篩選,然后再做查詢  關于查詢篩選出來的結果集能不能走到索引這個問題需要再測試一下

          posted on 2011-11-08 16:44 doctor 閱讀(187) 評論(0)  編輯  收藏 所屬分類: 工作筆記

          主站蜘蛛池模板: 石楼县| 武鸣县| 兴安盟| 固安县| 罗平县| 山东省| 蓬安县| 宜宾市| 芜湖县| 阳谷县| 章丘市| 老河口市| 柞水县| 伊吾县| 紫阳县| 布拖县| 蕉岭县| 娄底市| 徐汇区| 洮南市| 沙雅县| 桑植县| 高安市| 沿河| 泌阳县| 鄂伦春自治旗| 德令哈市| 新源县| 平阴县| 麻栗坡县| 灵璧县| 揭阳市| 巩留县| 新绛县| 丰顺县| 改则县| 保亭| 普洱| 沙河市| 麻阳| 兰坪|