Oracle 索 引 的 分 類 :降序索引和點陣圖索引
降序索引是8i裡面新出現的一種索引,是B*Tree的另一個衍生物,它的變化就是列在索引中的儲存方式從升序變成了降序,在某些場合下降序索引將會起作用。舉個例子,我們來查詢一張表並進行排序:
SQL> select * from test where a between 1 and 100 order by a desc,b asc;
已選擇100行。
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)
1 0 SORT(ORDER BY)(Cost=2 Card=100 Bytes=400)
2 1 INDEX (RANGE SCAN) OF 'IND_BT' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)
這裡優化器首先選擇了一個索引範圍掃描,然後還有一個排序的步驟。如果使用了降序索引,排序的過程會被取消。
SQL> create index test.ind_desc on test.testrev(a desc,b asc);
索引已建立。
SQL> analyze index test.ind_desc compute statistics;
索引已分析
再來看下執行路徑:
SQL> select * from test where a between 1 and 100 order by a desc,b asc;
已選擇100行。
Execution Plan(SQL執行計劃,稍後會講解如何使用)。
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)
1 0 INDEX (RANGE SCAN) OF 'IND_DESC' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)
我們看到排序過程消失了,這是因為建立降序索引時Oracle已經把資料都按降序排好了。
另外一個需要注意的地方是要設定init.ora裡面的compatible引數為8.1.0或以上,否則建立時desc關鍵字將被忽略。
點陣圖索引
點陣圖索引主要用於決策支援系統或靜態資料,不支援行級鎖定。點陣圖索引最好用於低cardinality列(即列的唯一值除以行數為一個很小的值,接近零),例如又一個“性別”列,列值有“Male”,“Female”,“Null”等3種,但一共有300萬條記錄,那麼3/3000000約等於0,這種情況下最適合用點陣圖索引。
點陣圖索引可以是簡單的(單列)也可以是連線的(多列),但在實踐中絕大多數是簡單的。在這些列上多點陣圖索引可以與AND或OR操作符結合使用。點陣圖索引使用點陣圖作為鍵值,對於表中的每一資料行點陣圖包含了TRUE(1)、FALSE(0)、或NULL值。點陣圖索引的點陣圖存放在B-Tree結構的頁節點中。B-Tree結構使查詢點陣圖非常方便和快速。另外,點陣圖以一種壓縮格式存放,因此佔用的磁碟空間比B-Tree索引要小得多。點陣圖索引的格式如表26-1所示。
表26-1 點陣圖索引的格式
行
值 1 2 3 4 5 6 7 8 9 10
Male 1 0 0 0 0 0 0 0 1 1
Female 0 1 1 1 0 0 1 1 0 0
Null 0 0 0 0 1 1 0 0 0 0
如果搜尋where gender=’Male’,要統計性別是”Male”的列行數的話,Oracle很快就能從點陣圖中找到共3行即第1,9,10行是符合條件的;如果要搜尋where gender=’Male’ or gender=’Female’的列的行數的話,也很容易從點陣圖中找到共8行即1,2,3,4,7,8,9,10行是符合條件的。如果要搜尋表的值的話,那麼Oracle會用內部的轉換函式將點陣圖中的相關資訊轉換成rowid來訪問資料塊。
相關推薦
Oracle 索 引 的 分 類 :降序索引和點陣圖索引
降序索引 降序索引是8i裡面新出現的一種索引,是B*Tree的另一個衍生物,它的變化就是列在索引中的儲存方式從升序變成了降序,在某些場合下降序索引將會起作用。舉個例子,我們來查詢一張表並進行排序: SQL> select * from test where a
Oracle B樹索引和點陣圖索引、索引的說明和目的、索引碎片問題
B樹索引和點陣圖索引 索引是資料庫為了提高查詢效率提供的一種冗餘結構,保守計算資料庫50%以上的調優可以通過調整索引來進行優化; 引用國內一位資深的ORACLE專家的話:"我其實只懂點(挨踢)知識,IT裡面其實只懂點甲骨文,甲骨文裡面其實只懂點資料庫,資料庫裡面其實只懂點SQL,SQL裡面其實
[Oracle]B-樹索引與點陣圖索引
11.3 B-樹索引 索引的頂端是根結點,這一結點中包含的是存有指向索引中下一級指標的項。接下來是分枝結點(塊),分枝結點中的記錄(項)存的是指向下一級(塊)的指標。最底層為葉子結點。在葉子結點存有指向表中資料行的索引項。葉子結點被雙向連結串列鏈在一起以方便按索引關鍵字的升序
Oracle 索 引 的 分 類 :使用特殊索引的注意事項
在ORACLE裡除了我們常用的B樹索引外,還有一些特殊索引能被使用。 如:倒序索引,位對映索引,函式索引等。 我根據自己的體會,列一個注意事項: 倒序索引: ORACLE DOC上說倒序索引比較適合於序列號產生的欄位,如唯一編號。
深入理解Oracle表(5):三大表連線方式詳解之Hash Join的定義,原理,演算法,成本,模式和點陣圖
Hash Join只能用於相等連線,且只能在CBO優化器模式下。相對於nested loop join,hash join更適合處理大型結果集 Hash Join的執行計劃第1個是hash表(build table),第2個探查表(probe table),
oracle使用索引和不使用索引效能分析
首先準備一張百萬條資料的表,這樣分析資料差距更形象! 下面用分頁表資料對錶進行分析,根據EMP_ID 欄位排序,使用索引和不使用索引效能差距! sql查詢語法準備,具體業務根據具體表書寫sql語法: SELECT * FROM (SELECT ROW_.*, ROWNUM ROWNUM_
分享 :資料視覺化和資訊圖成功的要素
如果僅僅是能夠將資料轉化成漂亮的圖表,或者是設計出20種不同式樣的圖表來解釋你的觀點,並不說明你
點陣圖索引bitmap(二):現代點陣圖索引技術
由點陣圖索引bitmap(一):基本概念可知,傳統點陣圖索引技術最大的侷限性主要表現在,高基數列的索引尺寸過大從而影響查詢效能。所以,從控制索引大小和減少查詢響應時間這兩個出發點,業內的優化策略一般從以下三個角度切入:分桶(binning)、編碼(encodin
python小練習:給定一個非空且為正整數的列表 按重復次數 降序排列輸出
class 數字 轉換成 原來 小練習 顯示 python index 去重 假設有個列表 a=[1,1,1,2,2,4,5,5,5,5] (非空且為正整數) 那麽根據要求 最終輸出的形式為 5,1,2,4 (按重復次數 降序排列輸出) 代碼實現及解釋: a=[1
搜索引擎系列四:Lucene提供的分詞器、IKAnalyze中文分詞器集成
author oid core 長度 maven項目 int get attribute clu 一、Lucene提供的分詞器StandardAnalyzer和SmartChineseAnalyzer 1.新建一個測試Lucene提供的分詞器的maven項目LuceneAn
搜索引擎系列八:solr-部署詳解(solr兩種部署模式介紹、獨立服務器模式詳解、SolrCloud分布式集群模式詳解)
nod 為什麽 用途 serve creat 復制 stand 數據 變量名 一、solr兩種部署模式介紹 Standalone Server 獨立服務器模式:適用於數據規模不大的場景 SolrCloud 分布式集群模式:適用於數據規模大,高可靠、高可用、高並發的場景 二
oracle,mysql,sqlserver分頁查詢,附實體類
最近簡單的對oracle,mysql,sqlserver2005的資料分頁查 (一)、 mysql的分頁查詢 &n
python:YY校招試題--傳入一個數組進行排序,奇數在前進行升序,偶數在後進行降序
a = input() # 輸入使用空格進行進行間隔 num = [int(n) for n in a.split()] print(num) def mysort(a,ascending=True): # 插入排序,a為list陣列,ascending=True時升
sklearn庫:分類、迴歸、聚類、降維、模型優化、文字預處理實現用例(趕緊收藏)
分類演算法 # knn演算法 from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier() ''' __init__函式 def __init__(self, n_neighbors=5,
oracle order by 排序之降序 null 排最後
1 表資料person_info id name age 1 qq 23 2 ee &
建立一個TreeSet物件,並自其中新增一些員工物件(Employee),其姓名和工資分別為:張三 8000,李四 6000,王五 5600,馬六 7500,最後按照工資的多少進行降序輸出.(提示:讓
import java.util.Set; import java.util.TreeSet; import java.util.Iterator; public class Employee im
Oracle之按工資降序查出表中第5到第10條的記錄的方法
1.找出emp表中第5到10條記錄並按降序排列 1.1 SELECT * FROM emp ORDER BY sal DESC; //查出表中所有資料並按降序排列 1.2 SELECT ROWNUM r,s.* FROM (SELECT * FROM emp OR
List根據實體類的某個屬性升序或者降序來排列
介紹 最近做的一個前臺的頁面的獲曲資料庫某個表的列表的功能,要求按照表的某個屬性來升序最好不要動mybatis,所以通過mybatis獲取的list,通過方法的 Collections.sort(list, new Comparator() {…});進行排序 升序 / 降序 i
Java程式碼:陣列選擇排序 (升序降序)
public class test9 {public static void main(String[] args){int []a={12,2,45,65,99,3,21};System.out.println("原陣列為:"+"\n"+a[0]+"\t"+a[1]+"\t
Oracle 降序索引
降序索引 降序索引是8i裡面新出現的一種索引,是B*Tree的另一個衍生物,它的變化就是列在索引中的儲存方式從升序變成了降序,在某些場合下降序索引將會起作用。舉個例子,我們來查詢一張表並進行排序: SQL> select * from test where a