查看使用者index
select index_name,table_name from user_indexes ;
查看index _name是屬於哪個COLUMNS
select * from user_ind_columns where index_name=upper('index _name’');
查看index空間的容量
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
index有自己的segments
查看 index的相關資料 (以SYS_C006883為例)
select * from user_segments where segment_name='SYS_C006883';
************************************************************
Oracle 強烈建立,任何一個應用程式的庫表至少需要創建兩個表空間,其中之一用於存儲表資料,而另一個用於存儲表索引資料。因為如果將表資料和索引資料放在一起,表資料的I/O操作和索引的I/O操作將產生影響系統性能的I/O競爭,降低系統的回應效率。將表資料和索引資料存放在不同的表空間中(如一個為 APP_DATA,另一個為APP_IDX),並在實體層面將這兩個表空間的資料檔案放在不同的物理磁片上,就可以避免這種競爭了。
擁有獨立的表空間,就意味著可以獨立地為表資料和索引資料提供獨立的物理存儲參數,而不會發生相互影響,畢竟表資料和索引資料擁有不同的特性,而這些特性又直接影響了物理存儲參數的設定。
此外,表資料和索引資料獨立存儲,還會帶來資料管理和維護上的方面。如你在遷移一個業務資料庫時,為了降低資料大小,可以只遷出表資料的表空間,在目標資料庫中通過重建索引的方式就可以生成索引資料了。
1.2 表資料和索引使用不同表空間的SQL語法
指定表資料及索引資料存儲表空間語句最簡單的形式如下。
將表資料存儲在APP_DATA表空間裡:
create table T_ORDER ( ORDER_ID NUMBER(10) not null, ...)tablespace APP_DATA;
將索引資料存儲在APP_IDX表空間裡:
create index IDX_ORDER_ITEM_ORDER_ID on T_ORDER_ITEM ( ORDER_ID ASC)tablespace APP_IDX;
|
Oracle資料庫中如何選擇合適的索引類型 |
|
|
|
建議二:創建索引的一些限制條件。 並不說,表或者列建立的索引越多越好。相反,索引建的越多,有時會反而會影響資料庫運行的整體性能。所以,在建立索引的時候,仍然會有一些限制條件。 一是不要對一些記錄內容比較少的表建立索引。在一個應用系統設計的時候,如設計一個ERP系統的資料庫,其雖然有幾千張表。但是,並不是每張表都有大量記錄的。相反,其中有近一半左右的資料表,可能其存儲的資料不會超過百條。如員工登陸帳戶密碼表、企業部門資訊表等等。對於這些記錄內容比較少的表,我們建立最好不要為其建立索引。無論是表上的,還是欄位上,都不要建立索引。 二是若表中的內容比較大,但是,這個表基本上不怎麼查詢的時候,則只需要在表上建立索引即可;而不需要在欄位上建立索引。如現在在ERP系統中,有一張表是“AD_Table”。其存儲的是這個資料庫中相關表的資訊。這張表只有在資料庫設計的時候才會用到。故這張表中的記錄雖然比較多,但是由於用戶用的比較少,所以,一般沒有必要為這張表建立列級別上的索引。而直接用表索引來代替。 三是在一些NULL欄位上,要根據實際情況來判斷是否要建立索引。如現在有一張人事檔案的表格,其上面有兩個欄位,分別為“身份證號碼”與“地區”。有時會為了某個原因,企業需要所有員工都在系統中登記他們的身份證號碼,以方便他們辦工資卡、社會保險等等。所以人事管理可能需要經常的查詢系統,看看有沒有沒有身份證號碼的員工資訊。此時,就需要利用條件“IS NULL”來查詢我們所需要的記錄。故為了提高查詢效率,若某個記錄可能為空,並且經常需要以NULL為條件進行查詢的時候,則最好給這個欄位添加一個索引,並且最好建立點陣圖索引。相反,若雖然可能會以NULL這個條件作為查詢的限制語句,但是,用的不是很多的時候,則就沒有必要為其建立索引。 建議三:多表連接查詢的索引設計。 如現在有一個人事管理系統。人事經理想知道員工的社保繳納情況。他需要知道員工的姓名、職務、戶籍性質(農民戶口跟居民戶口費用不一樣)、繳納的情況等等。但是,這些資訊包含在不同的表中。因為為了提高資料庫的性能,在表中存儲的可能只是某些序號,而不是具體的內容。如在社保表中,存儲的是員工對應的編號,而不是員工的名字。所以,要得到這份報表的話,就可能需要關聯員工基本資訊表、公司組織結構表等表格,才能夠查詢到用戶所需要的內容。 為此,就需要利用Join語句,把這些表格關聯起來。為了提高資料庫的查詢效率,這些用來關聯的欄位,最好能夠建立索引。這可以顯著的提高查詢的速度。 建議四:在表的更新速度與查詢速度之間尋求一個平衡點。 眾所周知,索引本身並不影響資料庫的使用,其主要是為了提高資料庫的查詢效率。但是,由於當資料庫的表中的資料更新的時候,包括記錄的增加、刪除、更改等等,都會對雖有的索引進行更新。 很明顯,索引雖然可以提高查詢速度。但是,也會對一些表的更新操作產生不良的影響。當在表中建立的索引越多,這個不利影響也會越大。故資料庫管理員在設置索引的時候,還需要注意,在這兩個之間需要一個均衡點。 按照一般的理論來說,當某個表多數用來查詢、更新相對來說比較上的話,則要多多採用索引。相反,當某個表記錄更新居主導,查詢相對來說比較少的話,則不要建立太多的索引,避免對更新的速度差生不利影響。 在實際工作中,若某個表頻繁的被視圖所調用的話,則最好就好設置比較多的索引了。
|
