oracle資料庫索引創建索引
Ⅰ 在oracle中如何創建聚集索引
對三個欄位建立索引:
create index Stuname on student(name);
create index Stusex on student(sex);
create index Stugrade on student(grade);
注意的問題,考慮是不是要建立唯一索引(unique),如果有學號的話,可以考慮建立唯一索引引。
再就是對經常查詢,但又相對穩定的可以建立聚簇索引,提高查詢效率
Ⅱ oracle 資料庫如何建立索引 如何用索引
創建索引語法:
CREATE[UNIQUE]|[BITMAP]INDEXindex_name
--unique表示唯一索引
ONtable_name([column1[ASC|DESC],column2
--bitmap,創建點陣圖索引
[ASC|DESC],?]|[express])[TABLESPACEtablespace_name][PCTFREEn1]
--指定索引在數據塊中空閑空間
[STORAGE(INITIALn2)][NOLOGGING]
--表示創建和重建索引時允許對表做DML操作,默認情況下不應該使用
[NOLINE][NOSORT];
--表示創建索引時不進行排序,默認不適用,如果數據已經是按照該索引順序排列的可以使用
(2)oracle資料庫索引創建索引擴展閱讀:
1、如果有兩個或者以上的索引,其中有一個唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引
2、至少要包含組合索引的第一列(即如果索引建立在多個列上,只有它的第一個列被where子句引用時,優化器才會使用該索引)
3、小表不要簡歷索引
4、對於基數大的列適合建立B樹索引,對於基數小的列適合簡歷點陣圖索引
5、列中有很多空值,但經常查詢該列上非空記錄時應該建立索引
6、經常進行連接查詢的列應該創建索引
7、使用createindex時要將最常查詢的列放在最前面
8、LONG(可變長字元串數據,最長2G)和LONGRAW(可變長二進制數據,最長2G)列不能創建索引
9、限製表中索引的數量(創建索引耗費時間,並且隨數據量的增大而增大;索引會佔用物理空間;當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度)
Ⅲ oracle資料庫如何重建索引
當索引的碎片過多時,會影響執行查詢的速度,從而影響到我們的工作效率。這時候採取的最有利的措施莫過於重建索引了。本文主要介紹了Oracle資料庫中檢查索引碎片並重建索引的過程,接下來我們就開始介紹這一過程。 重建索引的步驟如下: 1. 確認基本信息 登入資料庫,找到專門存放index 的tablespace,並且這個tablespace下所有index的owner都是tax.將index專門存放在一個獨立的tablespace, 與數據表的tablespace分離,是常用的資料庫設計方法。 2. 查找哪些index需要重建 通過anlyze index .... validate structure命令可以分析單個指定的index,並且將單個index 分析的結果存放到 index_stats試圖下。一般判斷的依據是: height >4 pct_used < 50% del_lf_rows / lf_rows +0.001 > 0.03 g ) 3. google上下載了遍歷所有index腳本 發現anlyze index .... validate structure只能填充單個index分析信息,於是google了下,從網上下了個Loop 腳本,遍歷索引空間下所有的索引名字,並且可以把所有index的分析信息存放到自己建立的一個用戶表中。 4. anlyze index 鎖定index 發現下載的腳本不好用,應為anlyze index在分析索引前要爭取獨占鎖,鎖住index,很明顯有些index正在被應用系統的使用,所以運行anlyze失敗。這里吸取的教訓是,盡量晚上做這種事。但是本人比較喜歡准時回家,所以在語句中添加Exception Handler,拋出anlyze index執行失敗的那些index 名稱,使腳本正常運行完畢。並且根據列印到前台的index name手動執行那些index分析。 5. 總結 雖然發現522個index中有160個符合上面的判斷的依據。但是發現索引都不大,而那些擁有百萬leaf的索引又沒有符合上面的判斷條件,所以結論是無需index rebuild online. 沒有啥碎片。 6.什麼時候可以rebuild index呢? rebuild index online,對那些有大量DML操作的大索引是有益的。可以每個月季度做一次針對較大索引的rebuild。
Ⅳ oracle怎樣添加索引
create index 索引名 on tbl_name (A1,B1).
創建索引的目的是為了在某些欄位上查詢更快,而添加的一些預地址。
Ⅳ 如何合理創建Oracle資料庫索引的3個要求
如何合理創建Oracle資料庫索引的3個要求:
在Oracle資料庫中,創建索引雖然比較簡單。但是要合理的創建索引則比較困難了。筆者認為,在創建索引時要做到三個適當,即在適當的表上、適當的列上創建適當數量的索引。雖然這可以通過一句話來概括優化的索引的基本准則,但是要做到這一點的話,需要資料庫管理員做出很大的努力。具體的來說,要做到這個三個適當有如下幾個要求。
一、 根據表的大小來創建索引。
雖然給表創建索引,可以提高查詢的效率。但是資料庫管理員需要注意的是,索引也需要一定的開銷的。為此並不是說給所有的表都創建索引,那麼就可以提高資料庫的性能。這個認識是錯誤的。恰恰相反,如果不管三七二十一,給所有的表都創建了索引,那麼其反而會給資料庫的性能造成負面的影響。因為此時濫用索引的開銷可能已經遠遠大於由此帶來的性能方面的收益。所以筆者認為,資料庫管理員首先需要做到,為合適的表來建立索引,而不是為所有的表建立索引。
一般來說,不需要為比較小的表創建索引。如在一個ERP系統的資料庫中,department表用來存儲企業部門的信息。一般企業的部分也就十幾個,最多不會超過一百個。這100條記錄對於人來說,可能算是比較多了。但是對於計算機來說,這給他塞塞牙縫都還不夠。所以,對類似的小表沒有必要建立索引。因為即使建立了索引,其性能也不會得到很大的改善。相反索引建立的開銷,如維護成本等等,要比這個要大。也就是說,付出的要比得到的多,顯然違反常理。
另外,就是對於超大的表,也不一定要建立索引。有些表雖然比較大,記錄數量非常的多。但是此時為這個表建立索引並一定的合適。如系統中有一張表,其主要用來保存資料庫中的一些變更信息。往往這些信息只給資料庫管理員使用。此時為這張表建立索引的話,反而不合適。因為這張表很少用到,只有在出問題的時候才需要查看。其次其即使查看,需要查詢的紀錄也不會很多,可能就是最近一周的更新記錄等等。對於對於一些超大的表,建立索引有時候往往不能夠達到預計的效果。而且在打表上建立索引,其索引的開銷要比普通的表大的多。那麼到底是否給大表建立索引呢?筆者認為,主要是看兩個方面的內容。首先是需要關注一下,在這張大表中經常需要查詢的記錄數量。一般來說,如果經常需要查詢的數據不超過10%到15%的話,那就沒有必要為其建立索引的必要。因為此時建立索引的開銷可能要比性能的改善大的多。這個比例只是一個經驗的數據。如果資料庫管理員需要得出一個比較精確的結論,那麼就需要進行測試分析。即資料庫管理員需要測試一下全表掃描的時間,看看其是否比建立索引後的查詢時間要長或者短。如果是長的話,則說明有建立索引的必要。但是如果沒有的話,則說明還是全表掃描速度來的快。此時也就沒有必要建立索引了。
總之,在考慮是否該為表建立索引時,一般來說小表沒有建立索引的必要。而對於打表的話,則需要進行實際情況實際分析。簡單一點的,可以根據大致的比率來確定。如果要精確一點的,則可以進行全表掃描性能分析,以判斷建立索引後是否真的如預期那樣改善了資料庫性能。
二、 根據列的特徵來創建索引。
列的特點不同,索引創建的效果也不同。資料庫管理員需要了解為哪些列創建索引可以起到事倍功半的效果。同時也需要了解為哪些列創建索引反而起到的是事倍功半的效果。這有利於他們了解到底給為怎麼樣的欄位建立索引。
根據筆者的經驗,往往為如下特徵的列創建索引能夠起到比較明顯的效果。如對於一些重復內容比較少的列,特別是對於那些定義了唯一約束的列。在這些列上建立索引,往往可以起到非常不錯的效果。如對於一些null值的列與非Null值的列混合情況下,如果用戶需要經常查詢所有的非Null值記錄的列,則最好為其設置索引。如果經常需要多表連接查詢,在用與連接的列上設置索引可以達到事半功倍的效果。
可見,索引設置的是否恰當,不僅跟資料庫設計架構有關,而且還跟企業的經濟業務相關。為此,對於一些套裝軟體,雖然一開始資料庫管理員已經做了索引的優化工作。但是隨著後來經濟數據的增加,這個索引的效果會越來越打折扣。這主要是因為記錄的表化影響到了索引優化的效果。所以筆者建議各位資料庫管理員,即使採用的是大牌軟體公司的套裝軟體,也需要隔一段時間,如一年,對資料庫的索引進行優化。該去掉的去掉,該調整的調整,以提高資料庫的性能。
如在資料庫中有一張表是用來保存用戶信息的。其中有個欄位身份證號碼,這是一個唯一的欄位。在資料庫設計時,給這個欄位創建了索引。但是當這個資料庫投入使用之後,用戶不怎麼輸入用戶的身份證號碼。而且平時也基本不按這個號碼來進行查詢。當記錄月來月多時,這個身份證號碼上的索引欄位不但不能夠改善資料庫的查詢性能,反而成了雞肋。對於這些有很多NULL值的列,而且不會經常查詢所有的非NULL值記錄的列,資料庫管理員要下決心,即使清除這些列上的索引。
所以說索引的優化與調整是一個動態的過程,並不是說資料庫設計好之後就不需要經過調整。資料庫管理員往往需要根據記錄的變化情況,來進行適當的變更。以提高索引的效果。
三、 在一個表上創建多少索引合適?
雖然說,在表上創建索引的數量沒有限制,但是決不是越多越好。也就是說,在創建索引這項事情上,1+1〉2往往不成立。有時候,創建索引越多,其可能會得到適得其反的效果。那麼在一個表上,到底給創建多少索引合適呢?這個沒有一個明確的標准。而是需要資料庫管理員根據實際的用途以及資料庫中記錄的情況,來進行判斷。
通常來說,表的索引越多,其查詢的速度也就越快。但是,表的更新速度則會降低。這主要是因為表的更新(如往表中插入一條記錄)速度,反而隨著索引的增加而增加。這主要是因為,在更新記錄的同時需要更新相關的索引信息。為此,到底在表中創建多少索引合適,就需要在這個更新速度與查詢速度之間取得一個均衡點。如對於一些數據倉庫或者決策型資料庫系統,其主要用來進行查詢。相關的記錄往往是在資料庫初始化的時候倒入。此時,設置的索引多一點,可以提高資料庫的查詢性能。同時因為記錄不怎麼更新,所以索引比較多的情況下,也不會影響到更新的速度。即使在起初的時候需要導入大量的數據,此時也可以先將索引禁用掉。等到數據導入完畢後,再啟用索引。可以通過這種方式來減少索引對數據更新的影響。相反,如果那些表中經常需要更新記錄,如一些事務型的應用系統,數據更新操作是家常便飯的事情。此時如果在一張表中建立過多的索引,則會影響到更新的速度。由於更新操作比較頻繁,所以對其的負面影響,要比查詢效率提升要大的多。此時就需要限制索引的數量,只在一些必要的欄位上建立索引。
筆者在平時資料庫優化時,往往會根據這些表的用途來為列設置索引。可以查詢相關的動態視圖,看看對於這張表的操作,是更新操作(包括更新、刪除、插入等等)占的比例大,還是查詢操作占的比例大。當過多的索引已經影響到更新操作的速度時,則資料庫管理員就需要先禁用某些索引,以提高資料庫的性能。
總之,在適當的表、適當的列上建立適當的索引。這一句話包含的意思有很多,以上內容只是一部分內容。俗話說,師傅領進門,修行靠自身。筆者在這里指能夠點到為止。一些具體的索引優化內容還是需要各位讀者在日常工作中去體會與總結