精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

oracle索引怎么用的 oracle中索引的作用

Oracle數據訪問和索引的使用

· 通過全表掃描的方式訪問數據;

10余年的鄂托克前網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網整合營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整鄂托克前建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯建站從事“鄂托克前網站設計”,“鄂托克前網站推廣”以來,每個客戶項目都認真落實執行。

· 通過ROWID訪問數據;

· 通過索引的方式訪問數據;

· Oracle順序讀取表中所有的行,并逐條匹配WHERE限定條件。

· 采用多塊讀的方式進行全表掃描,可以有效提高系統的吞吐量,降低I/O次數。

· 即使創建索引,Oracle也會根據CBO的計算結果,決定是否使用索引。

注意事項:

· 只有全表掃描時才可以使用多塊讀。該方式下,單個數據塊僅訪問一次。

· 對于數據量較大的表,不建議使用全表掃描進行訪問。

· 當訪問表中的數據量超過數據總量的5%—10%時,通常Oracle會采用全表掃描的方式進行訪問。

· 并行查詢可能會導致優化器選擇全表掃描的方式。1.2ROWID訪問表

· Rowid是數據存放在數據庫中的物理地址,能夠唯一標識表中的一條數據。

· Rowid指出了一條記錄所在的數據文件、塊號以及行號的位置,因此通過ROWID定位單行數據是最快的方法。

注意事項:

· Rowid作為一個偽列,其數值并不存儲在數據庫中,當查詢時才進行計算。

· Rowid除了在同一集簇中可能不唯一外,每條記錄的Rowid唯一。1.3 INDEX訪問表

· 通過索引查找相應數據行的Rowid,再根據Rowid查找表中實際數據的方式稱為“索引查找”或者“索引掃描”。

· 一個Rowid對應一條數據行(根據Rowid查找結果,僅需要對Rowid相應數據的數據塊進行一次I/O操作),因此該方式屬于“單塊讀”。

· 對于索引,除了存儲索引的數據外,還保存有該數據對應的Rowid信息。

· 索引掃描分為兩步:1)掃描索引確定相應的Rowid信息。 2)根據Rowid從表中獲得對應的數據。

注意事項:

· 對于選擇性高的數據行,索引的使用會提升查詢的性能。但對于DML操作,尤其是批量數據的操作,可能會導致性能的降低。

· 全表掃描的效率不一定比索引掃描差,關鍵看數據在數據塊上的具體分布。

索引是關系數據庫中用于存放每一條記錄的一種對象,主要目的是加快數據的讀取速度和完整性檢查。建立索引是一項技術性要求高的工作。一般在數據庫設計階段的與數據庫結構一道考慮。應用系統的性能直接與索引的合理直接有關。

(1) 單列索引

單列索引是基于單個列所建立的索引。

(2) 復合索引

復合索引是基于兩列或是多列的索引,在同一張表上可以有多個索引,但是要求列的組合必須不同。

(1) 重命名索引

(2) 合并索引

(表使用一段時間后在索引中會產生碎片,此時索引效率會降低,可以選擇重建索引或者合并索引,合并索引方式更好些,無需額外存儲空間,代價較低)

(3) 重建索引

方式一:刪除原來的索引,重新建立索引

當不需要時可以將索引刪除以釋放出硬盤空間。命令如下:

例如:

注:當表結構被刪除時,有其相關的所有索引也隨之被刪除。

方式二: Alter index 索引名稱 rebuild;

· 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。

· 索引可以大大加快數據的檢索速度,這是創建索引的最主要的原因。

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

· 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

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

· 索引的層次不要超過4層。

· 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。

· 除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。

· 當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

· 更新數據的時候,系統必須要有額外的時間來同時對索引進行更新,以維持數據和索引的一致性。

1) 不恰當的索引不但于事無補,反而會降低系統性能。因為大量的索引在進行插入、修改和刪除操作時比沒有索引花費更多的系統時間。

1) 應該建索引的列

· 在經常需要搜索的列上,可以加快搜索的速度;

· 在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;

· 在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;

· 在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;

· 在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;

· 在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。

2) 不應該建索引的列

· 在大表上建立索引才有意義,小表無意義。

· 對于那些在查詢中很少使用或者參考的列不應該創建索引。

· 對于那些只有很少數據值的列也不應該增加索引。比如性別,在查詢的結果中,結果集的數據行占了表中數據行的很大比例,。增加索引,并不能明顯加快檢索速度。

· 對于那些定義為blob數據類型的列不應該增加索引。這是因為,這些列的數據量要么相當大,要么取值很少。

· 當修改性能遠遠大于檢索性能時,不應該創建索引。

一個表中有幾百萬條數據,對某個字段加了索引,但是查詢時性能并沒有什么提高,這主要可能是oracle的索引限制造成的。Oracle的索引有一些索引限制,在這些索引限制發生的情況下,即使已經加了索引,oracle還是會執行一次全表掃描,查詢的性能不會比不加索引有所提高,反而可能由于數據庫維護索引的系統開銷造成性能更差。

下面的查詢即使在djlx列有索引,查詢語句仍然執行一次全表掃描。

把上面的語句改成如下的查詢語句,這樣,在采用基于規則的優化器而不是基于代價的優化器(更智能)時,將會使用索引。

特別注意:通過把不等于操作符改成OR條件,就可以使用索引,避免全表掃描。

使用IS NULL或IS NOT NULL同樣會限制索引的使用。因此在建表時,把需要索引的列設成NOT NULL。如果被索引的列在某些行中存在NULL值,就不會使用這個索引(除非索引是一個位圖索引)。

如果不使用基于函數的索引,那么在SQL語句的WHERE子句中對存在索引的列使用函數時,會使優化器忽略掉這些索引。 下面的查詢不會使用索引(只要它不是基于函數的索引)

也是比較難于發現的性能問題之一。比如:bdcs_qlr_xz中的zjh是NVARCHAR2類型,在zjh字段上有索引。如果使用下面的語句將執行全表掃描。

因為Oracle會自動把查詢語句改為

特別注意:不匹配的數據類型之間比較會讓Oracle自動限制索引的使用,即便對這個查詢執行Explain Plan也不能讓您明白為什么做了一次“全表掃描”。

(1) 索引無效

(2) 索引有效

oracle中怎么建立和使用索引

在程序中,oracle優化器在認為索引效率更高時,會自動調用索引。

也可以顯式調用索引:

select

/*+index(A,索引名)*/

*

from

A

where

b=‘’,c='';

請教: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 | COMPRESSnn

NOSORT | REVERSE

PARTITION | GLOBAL PARTITIONpartition_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 | COMPRESSnn:是否使用“鍵壓縮”(使用鍵壓縮可以刪除一個鍵列中出現的重復值)

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中的索引

方法如下: Oracle中建立索引,會提高查詢速度: create index 索引名 on 表名(列名); 例如: create index index_userid on tbl_detail(userid); 如何找數據庫表的主鍵字段的名稱? SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' a...

oracle的索引是怎么使用的?

索引就像書的目錄一樣,是為了方便查詢的。一般在數據表記錄很多的時候建立索引,oracle的索引有哈希索引和聚簇索引


分享題目:oracle索引怎么用的 oracle中索引的作用
鏈接地址:http://m.jcarcd.cn/article/hiphcc.html
主站蜘蛛池模板: 日本中文一二区 | 国产在线视频精 | 精品亚洲a∨ | 日韩福利局二区视频 | 欧美三级在线看 | 成人亚欧 | 三年片大全在线观看 | 青春草视频在线观看 | 国内精品视频 | 丝袜线观看 | 国产后入清| 午夜福利理论片 | 91午夜福利电影 | 乱伦中字网站 | 午夜一区二区免费看 | 成人日韩在线观 | 成人影院一区 | 国产a∨天天免 | 精品国产精品精 | 欧美日韩国产 | 97视频在线免费看 | 日韩欧美在 | 国产午夜在线视频 | 欧美日韩在线第一页 | 欧美日韩国产三区 | 91大神福| 97超级碰碰碰电影 | 区国产二区 | 国产精品之国产精品 | 成人羞羞国产免费 | 日韩制服丝袜电影 | 日韩种子 | 成人国内| 蜜桃视频91 | 国产精品香蕉国产 | 成人精品玖玖资源 | 动漫精品一区二区 | 午夜成人影视神马 | aⅴ三级| 蜜桃成熟 | 午夜福利导航免费 |