當前位置:首頁 » 存儲配置 » oracle索引存儲

oracle索引存儲

發布時間: 2022-07-28 19:21:49

『壹』 如何查看Oracle表以及索引的存儲空間

查看錶佔用空間
SELECT SEGMENT_NAME TABLE_NAME
,SUM(BLOCKS) BLOCKS
,SUM(BYTES)/(1024*1024) "TABLE_SIZE[MB]"
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE='TABLE'
AND SEGMENT_NAME=&TABLE_NAME
GROUP BY SEGMENT_NAME;

索引佔用空間
SELECT SEGMENT_NAME TABLE_NAME
,SUM(BLOCKS) BLOCKS
,SUM(BYTES)/(1024*1024) "TABLE_SIZE[MB]"
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE='INDEX'
AND SEGMENT_NAME=&TABLE_NAME
GROUP BY SEGMENT_NAME;

『貳』 oracle聚集索引 聚集索引和非聚集索引的區別

聚集索引:也稱 Clustered Index。是指關系表記錄的物理順序與索引的邏輯順序相同。由於一張表只能按照一種物理順序存放,一張表最多也只能存在一個聚集索引。與非聚集索引相比,聚集索引有著更快的檢索速度。
MySQL 里只有 INNODB 表支持聚集索引,INNODB 表數據本身就是聚集索引,也就是常說 IOT,索引組織表。非葉子節點按照主鍵順序存放,葉子節點存放主鍵以及對應的行記錄。所以對 INNODB 表進行全表順序掃描會非常快。
非聚集索引:也叫 Secondary Index。指的是非葉子節點按照索引的鍵值順序存放,葉子節點存放索引鍵值以及對應的主鍵鍵值。MySQL 里除了 INNODB 表主鍵外,其他的都是二級索引。MYISAM,memory 等引擎的表索引都是非聚集索引。簡單點說,就是索引與行數據分開存儲。一張表可以有多個二級索引。
關鍵詞:愛可生、開源資料庫、數據監測、資料庫運維

『叄』 oracle索引是什麼數據結構

索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據;Oracle存儲索引的數據結構是B*樹,點陣圖索引也是如此,只不過是葉子節點不同B*數索引;索引由根節點、分支節點和葉子節點組成,上級索引塊包含下級索引塊的索引數據,葉節點包含索引數據和確定行實際位置的rowid。
使用索引的目的:
1、加快查詢速度
2、減少I/O操作
3、消除磁碟排序
4、何時使用索引
5、查詢返回的記錄數
6、排序表<40%
7、非排序表 <7%
8、表的碎片較多(頻繁增加、刪除)

『肆』 Oracle索引的索引的分類

在關系資料庫中,每一行都由一個行唯一標識RowID。RowID包括該行所在的文件、在文件中的塊數和塊中的行號。索引中包含一個索引條目,每一個索引條目都有一個鍵值和一個RowID,其中鍵值可以是一列或者多列的組合。(一)索引按存儲方法分類,可以分為2類:B*樹索引和點陣圖索引。(1)B*樹索引的存儲結構類似書的索引結構,有分支和葉兩種類型的存儲數據塊,分支塊相當於書的大目錄,葉塊相當於索引到的具體的書頁。Oracle用B*樹機制存儲索引條目,以保證用最短路徑訪問鍵值。默認情況下大多使用B*樹索引,該索引就是通常所見的唯一索引、逆序索引。(2)點陣圖索引存儲主要用於節省空間,減少oracle對數據塊的訪問。它採用點陣圖偏移方式來與表的行ID號對應,採用點陣圖索引一般是重復值太多的表欄位。點陣圖索引之所以在實際密集型OLTP(聯機事物處理)中用的比較少,是因為OLTP會對表進行大量的刪除、修改、新建操作。Oracle每次進行操作都會對要操作的數據塊加鎖。以防止多人操作容易產生的資料庫鎖等待甚至死鎖現象。在OLAP(聯機分析處理)中應用點陣圖有優勢,因為OLAP中大部分是對資料庫的查詢操作,而且一般採用數據倉庫技術,所以大量數據採用點陣圖索引節省空間比較明顯。當創建表的命令中包含有唯一性關鍵字時,不能創建點陣圖索引,創建全局分區索引時也不能用點陣圖索引。(二)索引按功能和索引對象分還有以下類型。(1)唯一索引意味著不會有兩行記錄相同的索引鍵值。唯一索引表中的記錄沒有RowID,不能再對其建立其他索引。在oracle10g中,要建立唯一索引,必須在表中設置主關鍵字,建立了唯一索引的表只按照該唯一索引結構排序。(2)非唯一索引不對索引列的值進行唯一性限制。(3)分區索引是指索引可以分散地存在於多個不同的表空間中,其優點是可以提高數據查詢的效率。(4)未排序索引也稱為正向索引。Oracle10g資料庫中的行是按升序排序的,創建索引時不必指定對其排序而使用默認的順序。(5)逆序索引也稱反向索引。該索引同樣保持列按順序排列,但是顛倒已索引的每列的位元組。(6)基於函數的索引是指索引中的一列或者多列是一個函數或者表達式,索引根據函數或表達式計算索引列的值。可以將基於函數的索引建立創建成點陣圖索引。另外,按照索引所包含的列數可以把索引分為單列索引和復合索引。索引列只有一列的索引為單列索引,對多列同時索引稱為復合索引。

『伍』 請教:oracle中索引應用

一.索引介紹
1.1 索引的創建語法:
CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>
ON <schema>.<table_name>
(<column_name> | <expression> ASC | DESC,
<column_name> | <expression> ASC | DESC,...)
TABLESPACE <tablespace_name>
STORAGE <storage_settings>
LOGGING | NOLOGGING
COMPUTE STATISTICS
NOCOMPRESS | COMPRESS<nn>
NOSORT | REVERSE
PARTITION | GLOBAL PARTITION<partition_setting>
相關說明
1) UNIQUE | BITMAP:指定UNIQUE為唯一值索引,BITMAP為點陣圖索引,省略為B-Tree索引。
2)<column_name> | <expression> ASC | DESC:可以對多列進行聯合索引,當為expression時即「基於函數的索引」
3)TABLESPACE:指定存放索引的表空間(索引和原表不在一個表空間時效率更高)
4)STORAGE:可進一步設置表空間的存儲參數
5)LOGGING | NOLOGGING:是否對索引產生重做日誌(對大表盡量使用NOLOGGING來減少佔用空間並提高效率)
6)COMPUTE STATISTICS:創建新索引時收集統計信息
7)NOCOMPRESS | COMPRESS<nn>:是否使用「鍵壓縮」(使用鍵壓縮可以刪除一個鍵列中出現的重復值)
8)NOSORT | REVERSE:NOSORT表示與表中相同的順序創建索引,REVERSE表示相反順序存儲索引值
9)PARTITION | NOPARTITION:可以在分區表和未分區表上對創建的索引進行分區
1.2 索引特點:
第一,通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。
第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
1.3 索引不足:
第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
第二,索引需要佔物理空間,除了數據表占數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
1.4 應該建索引列的特點:
1)在經常需要搜索的列上,可以加快搜索的速度;
2)在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
3)在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
4)在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;
5)在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
6)在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
1.5 不應該建索引列的特點:
第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
第二,對於那些只有很少數據值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。
第三,對於那些定義為blob數據類型的列不應該增加索引。這是因為,這些列的數據量要麼相當大,要麼取值很少。
第四,當修改性能遠遠大於檢索性能時,不應該創建索引。這是因為,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引。
1.6 限制索引
限制索引是一些沒有經驗的開發人員經常犯的錯誤之一。在SQL中有很多陷阱會使一些索引無法使用。下面討論一些常見的問題:
1.6.1 使用不等於操作符(<>、!=)
下面的查詢即使在cust_rating列有一個索引,查詢語句仍然執行一次全表掃描。
select cust_Id,cust_name from customers where cust_rating <> 'aa';
把上面的語句改成如下的查詢語句,這樣,在採用基於規則的優化器而不是基於代價的優化器(更智能)時,將會使用索引。
select cust_Id,cust_name from customers where cust_rating < 'aa' or cust_rating > 'aa';
特別注意:通過把不等於操作符改成OR條件,就可以使用索引,以避免全表掃描。
1.6.2 使用IS NULL 或IS NOT NULL
使用IS NULL 或IS NOT NULL同樣會限制索引的使用。因為NULL值並沒有被定義。在SQL語句中使用NULL會有很多的麻煩。因此建議開發人員在建表時,把需要索引的列設成 NOT NULL。如果被索引的列在某些行中存在NULL值,就不會使用這個索引(除非索引是一個點陣圖索引,關於點陣圖索引在稍後在詳細討論)。
1.6.3 使用函數
如果不使用基於函數的索引,那麼在SQL語句的WHERE子句中對存在索引的列使用函數時,會使優化器忽略掉這些索引。 下面的查詢不會使用索引(只要它不是基於函數的索引)
select empno,ename,deptno from emp where trunc(hiredate)='01-MAY-81';
把上面的語句改成下面的語句,這樣就可以通過索引進行查找。
select empno,ename,deptno from emp where hiredate<(to_date('01-MAY-81')+0.9999);
1.6.4 比較不匹配的數據類型
也是比較難於發現的性能問題之一。 注意下面查詢的例子,account_number是一個VARCHAR2類型,在account_number欄位上有索引。
下面的語句將執行全表掃描:
select bank_name,address,city,state,zip from banks where account_number = 990354;
Oracle可以自動把where子句變成to_number(account_number)=990354,這樣就限制了索引的使用,改成下面的查詢就可以使用索引:
select bank_name,address,city,state,zip from banks where account_number ='990354';
特別注意:不匹配的數據類型之間比較會讓Oracle自動限制索引的使用,即便對這個查詢執行Explain Plan也不能讓您明白為什麼做了一次「全表掃描」。
1.7 查詢索引
查詢DBA_INDEXES視圖可得到表中所有索引的列表,注意只能通過USER_INDEXES的方法來檢索模式(schema)的索引。訪問USER_IND_COLUMNS視圖可得到一個給定表中被索引的特定列。
1.8 組合索引
當某個索引包含有多個已索引的列時,稱這個索引為組合(concatented)索引。在 Oracle9i引入跳躍式掃描的索引訪問方法之前,查詢只能在有限條件下使用該索引。比如:表emp有一個組合索引鍵,該索引包含了empno、 ename和deptno。在Oracle9i之前除非在where之句中對第一列(empno)指定一個值,否則就不能使用這個索引鍵進行一次范圍掃描。
特別注意:在Oracle9i之前,只有在使用到索引的前導索引時才可以使用組合索引!
1.9 ORACLE ROWID
通過每個行的ROWID,索引Oracle提供了訪問單行數據的能力。ROWID其實就是直接指向單獨行的線路圖。如果想檢查重復值或是其他對ROWID本身的引用,可以在任何錶中使用和指定rowid列。

『陸』 oracle中,索引是干什麼用的

索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據;Oracle存儲索引的數據結構是B*樹,點陣圖索引也是如此,只不過是葉子節點不同B*數索引;索引由根節點、分支節點和葉子節點組成,上級索引塊包含下級索引塊的索引數據,葉節點包含索引數據和確定行實際位置的rowid。
使用索引的目的:
1、加快查詢速度
2、減少I/O操作
3、消除磁碟排序
4、何時使用索引
5、查詢返回的記錄數
6、排序表<40%
7、非排序表 <7%
8、表的碎片較多(頻繁增加、刪除)

『柒』 Oracle資料庫的索引存放在____________表中,在默認情況下,0racle的審計是

索引存放在dba_indexes (user_indexes)
實例中所有的索引dba_indexes
用戶自己的索引user_indexes

『捌』 oracle的索引有幾種

Oracle 提供了多種不同類型的索引以供使用。簡單地說, Oracle 中包括如下索引:
1、 B* 樹索引
這些是我所說的 「 傳統 「 索引。到目前為止,這是 Oracle 和大多數其他資料庫中最常用的索引。 B* 樹的構造類似於二叉樹,能根據鍵提供一行或一個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過,需要注意重要的一點, 」 B* 樹 「 中的 」 B 「 不代表二叉( binary ),而代表平衡( b alanced )。B* 樹索引並不是一顆二叉樹,這一點在介紹如何在磁碟上物理地存儲 B* 樹時就會了解到。 B* 樹索引有以下子類型:
索引組織表( index organized table ):索引組織表以 B* 樹結構存儲。堆表的數據行是以一種無組織的方式存儲的(只要有可用的空間,就可以放數據),而 IOT 與之不同, IOT 中的數據要按主鍵的順序存儲和排序。對應用來說, IOT 表現得與 「 常規 「 表並無二致;需要使用 SQL 來正確地訪問 IOT 。 IOT 對信息獲取、空間系統和 OLAP 應用最為有用。 IOT 在上一章已經詳細地討論過。
B*樹聚簇索引( B*tree cluster index )這些是傳統 B* 樹索引的一個變體(只是稍有變化)。 B* 樹聚簇索引用於對聚簇鍵建立索引(見第 11. 章中 「 索引聚簇表 「 一節),所以這一章不再討論。在傳統 B* 樹中 ,鍵都指向一行;而 B* 樹聚簇不同,一個聚簇鍵會指向一個塊,其中包含與這個聚簇鍵相關的多行。
降序索引( descending index ):降序索引允許數據在索引結構中按 「 從大到小 「 的順序(降序)排序,而不是按 」 從小到大 「 的順序(升序)排序。我們會解釋為什麼降序索引很重要,並說明降序索引如何工作。
反向鍵索引( reverse key index ):這也是 B* 樹索引,只不過鍵中的位元組會 「 反轉 「 。利用反向鍵索引,如果索引中填充的是遞增的值,索引條目在索引中可以得到更均勻的分布。例如,如果使用一個序列來生成主鍵,這個序列將生成諸如 987500 、 987501 、 987502 等值。這些值是順序的,所以倘若使用一 個傳統的 B* 樹索引,這些值就可能放在同一個右側塊上,這就加劇了對這一塊的競爭。利用反向鍵, Oracl e則會邏輯地對 205789 、 105789 、 005789 等建立索引。 Oracle 將數據放在索引中之前,將先 把所存儲數據的位元組反轉,這樣原來可能在索引中相鄰放置的值在位元組反轉之後就會相距很遠。通過反轉位元組,對索引的插入就會分布到多個塊上。

2、 點陣圖索引( bitmap index )
在一顆 B* 樹中,通常索引條目和行之間存在一種一對一的關系:一個 索引條目就指向一行。而對於點陣圖索引,一個索引條目則使用一個點陣圖同時指向多行。點陣圖索引適用於高度重復而且通常只讀的數據(高度重復是指相對於表中的總行數,數據只有很少的幾個不同值)。考慮在一 個有 100 萬行的表中,每個列只有 3 個可取值: Y 、 N 和 NULL 。舉例來說,如果你需要頻繁地統計多少行有值Y ,這就很適合建立點陣圖索引。不過並不是說如果這個表中某一列有 11.000 個不同的值就不能建立點陣圖索引,這一列當然也可以建立 點陣圖索引。在一個 OLTP 資料庫中,由於存在並發性相關的問題,所以不能考慮使用點陣圖索引(後面我們就會討論這一點)。注意,點陣圖索引要求使用 Oracle 企業版或個人版。
點陣圖聯結索引( bitmap join index ):這為索引結構(而不是表)中的數據提供了一種逆規范化的 方法。例如,請考慮簡單的 EMP 和 DEPT 表。有人可能會問這樣一個問題: 「 多少人在位於波士頓的部門工作 ?「 EMP 有一個指向 DEPT 的外鍵,要想統計 LOC 值為 Boston 的部門中的員工人數,通常必須完成表聯結,將 LOC 列聯結至 EMP 記錄來回答這個問題。通過使用點陣圖聯結索引,則可以在 EMP 表上對 LOC 列建立索引 。
3、 基於函數的索引( function-based index )
這些就是 B* 樹索引或點陣圖索引,它將一個函數計算得到的結果存儲在行的列中,而不是存儲列數據本身。可以把基於函數的索引看作一個虛擬列(或派生列)上的索引,換句話說,這個列並不物理存儲在表中。基於函數的索引可以用於加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 這樣的查詢,因為值 FUNCTION(DATABASE_COLUMN) 已經提前計算並存儲在索引中。
4、 應用域索引( application domain index )
應用域索引是你自己構建和存儲的索引,可能存儲在Oracle 中,也可能在 Oracle 之外。你要告訴優化器索引的選擇性如何,以及執行的開銷有多大,優化器則會根據你提供的信息來決定是否使用你的索引。 Oracle 文本索引就是應用域索引的一個例子;你也可 以使用構建 Oracle 文本索引所用的工具來建立自己的索引。需要指出,這里創建的 「 索引 「 不需要使用傳統的索引結構。例如, Oracle 文本索引就使用了一組表來實現其索引概念。

5、HASH索引
使用HASH索引必須要使用HASH群集。建立一個群集或HASH群集的同時,也就定義了一個群集鍵。這個鍵告訴Oracle如何在群集上存儲表。在存儲數據時,所有與這個群集鍵相關的行都被存儲在一個資料庫塊上。若數據都存儲在同一個資料庫塊上,並且使用了HASH索引,Oracle就可以通過執行一個HASH函數和I/O來訪問數據——而通過適用一個二元高度為4的B-樹索引來訪問數據,則需要在檢索數據時使用4個I/O。
技巧:HASH索引在有限制條件(需要指定一個確定的值而不是一個值范圍)的情況下非常有用。
6、分區索引
分區索引就是簡單地把一個索引分成多個片斷,這樣可以訪問更小的片斷,並且可以把這些片斷分別存放在不同的硬碟上(避免I/O問題)。B-數索引和點陣圖索引都可以被分區,HASH索引不可以被分區。
有兩種類型的分區索引:本地分區索引和全局分區索引。每個類型都有兩個子類型,有前綴索引和無前綴索引。如果使用了點陣圖索引就必須是本地索引。
把索引分區最主要的原因是可以減少所需讀取的索引的大小,另外把分區放在不同的表空間中可以提高分區的可用性和可靠性。

『玖』 oracle 索引佔用存儲空間嗎

佔用的,你SQL語句創建索引時,語句裡面就有指定該索引存放到哪個表空間,而表空間的物理形式就是存放在磁碟上的數據文件,所以是佔用存儲空間的

『拾』 Oracle資料庫中的最常用的索引有哪些

1. b-tree索引
Oracle資料庫中最常見的索引類型是b-tree索引,也就是B-樹索引,以其同名的計算科學結構命名。CREATE
INDEX語句時,默認就是在創建b-tree索引。沒有特別規定可用於任何情況。
2. 點陣圖索引(bitmap index)
點陣圖索引特定於該列只有幾個枚舉值的情況,比如性別欄位,標示欄位比如只有0和1的情況。
3. 基於函數的索引
比如經常對某個欄位做查詢的時候是帶函數操作的,那麼此時建一個函數索引就有價值了。

熱點內容
中國移動用什麼服務密碼 發布:2024-05-20 00:52:10 瀏覽:695
make編譯輸出 發布:2024-05-20 00:37:01 瀏覽:67
4200存儲伺服器 發布:2024-05-20 00:20:35 瀏覽:160
解壓小生活 發布:2024-05-20 00:15:03 瀏覽:143
粘土小游戲伺服器ip 發布:2024-05-20 00:14:00 瀏覽:196
魔獸世界如何快速增加伺服器 發布:2024-05-19 23:53:37 瀏覽:694
安卓手機如何轉入蘋果手機內 發布:2024-05-19 23:50:35 瀏覽:405
安卓哪個能安裝血染小鎮 發布:2024-05-19 23:45:57 瀏覽:901
tensorflowmac編譯 發布:2024-05-19 23:28:59 瀏覽:702
sqlmaxvarchar 發布:2024-05-19 23:24:02 瀏覽:703