oracle索引研究
oracle索引研究
索引本來是資料庫裡極其重要的東西,但是很多人對其分析的倒是很少,即使分析了也趨於學院味,所以本人(第一次發文章請大家別笑話啊)對索引分析如下。全都是來自實踐的總結,而且在實際優化中得到驗證,希望大家批評斧正:
索引的誤區。
(a)字段標誌位不可以建立索引。
這是乙個錯誤的想法。看乙個索引是否可以建立是看資料庫表裡的資料分布,而非這個字段是不是標誌位。 例如:乙個資料庫裡面如果標誌位為 1 男 0女,這樣的標誌位建立索引就沒有什麼意義。因為即使建立索引也需要訪問一半的資料,加上索引的開銷,不如走權標掃瞄。但是比如下面的標誌位:1 為已經發貨,0為未發貨。而0的資料庫表記錄數量非常的少,那麼建立索引對整個資料庫表的訪問速度將是乙個極大的提高。
在本人所在公司的乙個專案裡面因為在標誌位上家你索引使原來需要執行40-60分鐘的應用在瞬間可以完成。
(b) 欄位為null不可以建立索引。
這也是乙個錯誤的想法。解釋這個問題要從資料庫的索引機理說起。如下圖(b-tree):
當資料庫表上建立索引以後,如果某一行上的資料為null那麼索引將跳過這個字段認為它根本不存在。
那麼我們可以得到如下有用的結論:
1、在乙個欄位上建立索引,即使這個欄位有空值,但是只要你不用 is null語句一點也不影響您程式執行的速度。因為在這個表上建立的索引就當null值不存在。如果你搜尋的是非空的值變沒必要因為空值影響你建立索引的信心。
2、is not null語句的執行方式。 這個語句和is null語句可以說有很大的區別,因為它會走索引。別小看這個小小的差別。當你統計乙個表的資料有多少null值的時候你要是用 where field is null那麼你會死的很慘。索引你可以轉變一下思路:用表的主鍵求得表記錄總和 然後 減去 is not null的字段數就得到欄位為空的數目。
sunjet2000 上傳了這個附件:
索引學習研究
概念 代價 分類 非聚集索引 唯一索引 原則 建立和管理索引 設計索引是,應考慮以下資料庫準則 乙個表如果建有大量索引,會影響insert,update和delete語句的效能。避免對經常更新的表進行過多的索引,並且索引應保持較窄。使用多個索引可以提高更新少而資料量大的查詢的效能。對小表進行索引可能...
Oracle索引 索引型別
oracle 提供了多種不同型別的索引以供使用。簡單地說,oracle 中包括如下索引 b 樹索引 這些是我所說的 傳統 索引。到目前為止,這是 oracle 和大多數其他資料庫中最常用的索引。b 樹的構造類似於二叉樹,能根據鍵提供一行或乙個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過...
Oracle研究專題 Oracle系統安裝與配置
最近開始研究oracle資料庫,蓋因公司的系統要麼oracle要麼是mysql吧。作為乙個it工作者,沒有碰過oracle是一件很匪夷所思得事情。想到過去幾年,乃至接觸it行業開始就只有玩過sql server,是太low了。所以從現在開始要好好學一下oracle資料庫,不僅是plsql的開發,還要...