亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle 基礎學習之索引

系統 1897 0

一. 按存儲結構分

a. b樹索引   默認索引

    ?    即二叉搜索樹:

??????         1.所有非葉子結點至多擁有兩個兒子(Left和Right)

           2.所有結點存儲一個 關鍵字

??????         3.非葉子結點的左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的子樹;

??????         如:

            ?B樹的搜索,從 根結點 開始,如果查詢的關鍵字與結點的關鍵字相等,那么就命中;

            否則,如果查詢關鍵字比結點關鍵字小,就進入左兒子;如果比結點關鍵字大,就進入

            右兒子;如果左兒子或右兒子的指針為空,則報告找不到相應的關鍵字;

??????          ?如果B樹的所有非葉子結點的左右子樹的結點數目均保持差不多(平衡),那么B樹

            的搜索性能逼近 二分查找 ;但它比連續內存空間的二分查找的優點是,改變B 樹結構

             (插入與刪除結點)不需要移動大段的內存數據,甚至通常是 常數 開銷;

??????         如:

            但B樹在經過多次插入與刪除后,有可能導致不同的結構:

??             右邊也是一個B樹,但它的搜索性能已經是 線性 的了;同樣的關鍵字集合有可能導致不同的

            樹結構索引;所以,使用B樹還要考慮盡可能讓B樹保持左圖的結構,和避免右圖的結構,也就

            是所謂的“平衡”問題;??????

??????             實際使用的B樹都是在原B樹的基礎上加上平衡算法,即“ 平衡二叉樹 ”;如何保持B樹

            結點分布均勻的平衡算法是平衡 二叉樹 的關鍵;平衡算法是一種在B樹中插入和刪除結點的策略;

b. 位圖索引

        如有表 test(id,name,address)
        數據
            (1,張三,大連)
            (2,李四,天津)
            (3,王五,北京)
            (4,趙六,大連)
            ....

            類似這樣的數據,如果查詢的時候用到 【where address='大連'】,因為數據庫中有很多這樣的數據,所以一般的索引起不到查詢加速的作用,而建立位圖索引后會產生如下位圖效果:
            假設有4條數據(就如上所示)

            大連 天津? 北京
            1??? 0???? 0
            0??? 1???? 0
            0??? 0???? 1
            1??? 0???? 0

            這樣當查詢:
                select * from 表 where address='大連' or address='北京';
            的時候數據庫很快就能根據 同行的 1和0 判斷出那一條數據符合要求。

在實際應用中,如果某個字段的值需要頻繁更新,那么就不適合在它上面創建位圖索引。

            在位圖索引中,如果你更新或插入其中一條數值為N的記錄,

         ????  那么相應表中數值為N的記錄(可能成百上千條)全部被Oracle鎖定,

          ???? 這就意味著其它用戶不能同時更新這些數值為N的記錄,其它用戶必須要等第一個用戶提交后,

          ???? 才能獲得鎖,更新或插入數據,bitmap index它主要用于決策支持系統或靜態數據。

?

c. 反向鍵索引

        我們知道Oracle會自動為表的主鍵列建立索引,這個默認的索引是普通的B-Tree索引。對于主鍵值是按順序(遞增或遞減)加入的情況,默認的B- Tree索引并不理想。這是因為如果索引列的值具有嚴格順序時,隨著數據行的插入,索引樹的層級增長很快。搜索索引發生的I/O讀寫次數和索引樹的層級數成正比,也就是說,一棵具有5個層級的B-Tree索引,在最終讀取到索引數據時最多可能發生多達5次I/O操作。因而,減少索引的層級數是索引性能調整的一個重要方法。

如果索引列的數據以嚴格的有序的方式插入,那么B-Tree索引樹將變成一棵不對稱的"歪樹",

而如果索引列的數據以隨機值的方式插入,我們將得到一棵趨向對稱的索引樹,

對稱的B-Tree索引

搜索到A塊需要進行5次I/O操作,而圖 6僅需要3次I/O操作。

既然索引列數據從序列中獲取,其有序性無法規避,但在建立索引時,Oracle允許對索引列的值進行反向,即預先對列值進行比特位的反向,如 1000,10001,10011,10111,1100經過反向后的值將是0001,1001,1101,0011。顯然經過位反向處理的有序數據變得比較隨機了,這樣所得到的索引樹就比較對稱,從而提高表的查詢性能。

但反向鍵索引也有它局限性:如果在WHERE語句中,需要對索引列的值進行范圍性的搜索,如BETWEEN、<、>等,其反向鍵索引無法使用,此時,Oracle將執行全表掃描;只有對反向鍵索引列進行 <> 和 = 的比較操作時,其反向鍵索引才會得到使用。

?

二. 按索引值分

    a. 唯一索引

        列上的值是唯一的,主鍵為唯一索引

    b. 非唯一索引

        在列上的值可以為null

三. 其它索引

    a. 單列索引

        一個列建索引

    b. 組合索引

        多個列一起建索引

    c. 基于函數索引

?        使用函數里面的表達式來索引

?

能用唯一索引,一定用唯一索引

  能加非空,就加非空約束

  一定要統計表的信息,索引的信息,柱狀圖的信息。

  聯合索引的順序不同,影響索引的選擇,盡量將值少的放在前面

  只有做到以上四點,數據庫才會正確的選擇執行計劃。

?

四: 創建語法

    create unique|bitmap index 索引名稱

    on 表名

    (列1 asc|desc?,列2.。。。)

    reverse

    reverse 為反向鍵索引,unique唯一和bitmap位置不寫為b樹索引


?

Oracle 基礎學習之索引


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品国产一区二区二三区在线观看 | 成人久久18免费游戏网站 | 高清午夜毛片 | 日韩欧美 在线播放 | 手机看高清特黄a大片 | 大陆一级毛片免费视频观看i | 国产高清精品一级毛片 | 在线播放91| 加勒比一本 | 久久综合中文字幕一区二区三区 | 久操免费 | 国产综合色在线视频区色吧图片 | 欧美一区二区三区播放 | 高清国产美女一级毛片 | 国产精品亚洲欧美日韩久久 | 雅虎日本免费一区二区三区 | 久久不色 | 欧美aaa大片 | 91精品久久久久久久久久小网站 | 久久精品国产久精国产 | 中文字幕久久久久一区 | 久re这里只有精品最新地址 | 在线观看一级毛片免费 | 在线aa | 一级特黄牲大片免费视频 | 亚洲欧美日韩一区二区 | 99热这里只有精品国产免费 | 色噜噜狠狠色综合免费视频 | 久久久久一区二区三区 | 69性影院在线观看国产精品87 | 国产成a人片在线观看视频99 | 天天操天天插天天干 | 老子影院午夜伦不卡手机 | 羞羞的视频在线观看 | 九9热这里真品 | 欧美高清一区二区三区欧美 | 按摩理论片 | 欧美综合色另类图片区 | 欧美v亚洲v国产v | 久久精品视 | 91亚洲精品久久91 |