日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 索引个数限制,oracle索引详解

發布時間:2023/12/31 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 索引个数限制,oracle索引详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

索引對于Oracle學習來說,非常重要,在數據量巨大的狀況下,使用恰到好處的索引,將會使得數據查詢時間大大減少。

1、索引的創建語法:

CREATE UNIUQE | BITMAP INDEX .

ON .

( | ASC | DESC,

| ASC | DESC,...)

TABLESPACE

STORAGE

LOGGING | NOLOGGING

COMPUTE STATISTICS

NOCOMPRESS | COMPRESS

NOSORT | REVERSE

PARTITION | GLOBAL PARTITION

相關說明

1)UNIQUE | BITMAP:指定UNIQUE為唯一值索引。BITMAP為位圖索引,省略為B-Tree索引。

2) | ASC | DESC:能夠對多列進行聯合索引,當為expression時即“基于函數的索引”

3)TABLESPACE:指定存放索引的表空間(索引和原表不在一個表空間時效率更高)

4)STORAGE:可進一步設置表空間的存儲參數

5)LOGGING | NOLOGGING:是否對索引產生重做日志(對大表盡量使用NOLOGGING來降低占用空間并提高效率)

6)COMPUTE STATISTICS:創建新索引時收集統計信息

7)NOCOMPRESS | COMPRESS:是否使用“鍵壓縮”(使用鍵壓縮能夠刪除一個鍵列中出現的反復值)

8)NOSORT | REVERSE:NOSORT表示與表中同樣的順序創建索引。REVERSE表示相反順序存儲索引值

9)PARTITION | NOPARTITION:能夠在分區表和未分區表上對創建的索引進行分區

2、索引特點:

第一,通過創建唯一性索引,能夠保證數據庫表中每一行數據的唯一性。

第二。能夠大大加快數據的檢索速度。這也是創建索引的最基本的原因。

第三。能夠加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

第四。在使用分組和排序子句進行數據檢索時。相同能夠顯著降低查詢中分組和排序的時間。

第五,通過使用索引。能夠在查詢的過程中,使用優化隱藏器。提高系統的性能。

3、索引不足:

第一,創建索引和維護索引要耗費時間,這樣的時間隨著數據量的添加而添加。

第二,索引須要占物理空間。除了數據表占數據空間之外,每個索引還要占一定的物理空間,假設要建立聚簇索引。那么須要的空間就會更大。

第三。當對表中的數據進行添加、刪除和改動的時候。索引也要動態的維護。這樣就減少了數據的維護速度。

4.限制索引

限制索引是一些沒有經驗的開發者常常犯的錯誤之中的一個。在SQL中有非常多陷阱會使一些索引無法使用。以下討論一些常見的問題:

4.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條件,就能夠使用索引。以避免全表掃描。

4.2 使用IS NULL 或IS NOT NULL

使用IS NULL 或IS NOT NULL相同會限制索引的使用。由于NULL值并沒有被定義。

在SQL語句中使用NULL會有非常多的麻煩。

因此建議開發者在建表時,把須要索引的列設成NOT NULL。

假設被索引的列在某些行中存在NULL值。就不會使用這個索引

(除非索引是一個位圖索引。關于位圖索引在稍后在具體討論)。

4.3 使用函數

假設不使用基于函數的索引,那么在SQL語句的WHERE子句中對存在索引的列使用函數時。會使優化器忽略掉這些索引。

以下的查詢不會使用索引(僅僅要它不是基于函數的索引)

select empno,ename,deptno from emp? where? trunc(hiredate)='01-MAY-81';

把上面的語句改成以下的語句,這樣就能夠通過索引進行查找。

select empno,ename,deptno from emp where? hiredate

4.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也不能讓您明確為什么做了一次“全表掃描”

5、查詢索引

查詢DBA_INDEXES視圖可得到表中全部索引的列表。注意僅僅能通過USER_INDEXES的方法來檢索模式(schema)的索引。

訪問USER_IND_COLUMNS視圖可得到一個給定表中被索引的特定列。

6、組合索引

當某個索引包括有多個已索引的列時,稱這個索引為組合(concatented)索引

7、索引的類型

B-樹索引、位圖索引、HASH索引、索引編排表 、反轉鍵索引、基于函數的索引、分區索引、本地和全局索引

7.1? B樹索引(默認類型)

B-tree 特點:

適合與大量的增、刪、改(OLTP)

不能用包括OR操作符的查詢。

適合高基數的列(唯一值多)

典型的樹狀結構;

每一個結點都是數據塊;

大多都是物理上一層、兩層或三層不定,邏輯上三層。

葉子塊數據是排序的,從左向右遞增。

在分支塊和根塊中放的是索引的范圍。

注:B*Tree索引在檢索高基數數據列(高基數數據列是指該列有非常多不同的值)時提供了最好的性能。

當取出的行數占總行數比例較小時B-Tree索引比全表檢索提供了更有效的方法。

但當檢查的范圍超過表的10%時就不能提高取回數據的性能。

7.2? 位圖索引

Bitmap 特點:

適合與決策支持系統;

做UPDATE代價很高。

很適合OR操作符的查詢;

基數比較少的時候才干建位圖索引;

注:位圖索引最好用于低cardinality列(即列的唯一值除以行數為一個非常小的值。接近零),

比如又一個“性別”列,列值有“Male”,“Female”,“Null”等3種。但一共同擁有300萬條記錄,那么3/3000000約等于0,這樣的情況下最適合用位圖索引

7.3? 函數索引

能夠在表中創建基于函數的索引。假設沒有基于函數的索引,不論什么在列上運行了函數的查詢都不能使用這個列的索引。

必須設置下面兩個系統參數:

QUERY_REWRITE_ENABLED=TRUE

QUERY_REWRITE_INTEGRITY=TRUSTED

總結

以上是生活随笔為你收集整理的oracle 索引个数限制,oracle索引详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。