『壹』 oracle中,索引是干什麼用的
索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據;Oracle存儲索引的數據結構是B*樹,點陣圖索引也是如此,只不過是葉子節點不同B*數索引;索引由根節點、分支節點和葉子節點組成,上級索引塊包含下級索引塊的索引數據,葉節點包含索引數據和確定行實際位置的rowid。
使用索引的目的:
1、加快查詢速度
2、減少I/O操作
3、消除磁碟排序
4、何時使用索引
5、查詢返回的記錄數
6、排序表<40%
7、非排序表
<7%
8、表的碎片較多(頻繁增加、刪除)
『貳』 oracle資料庫索引種類,分別什麼情況下使用
1.
b-tree索引
Oracle資料庫中最常見的索引類型是b-tree索引,也就是B-樹索引,以其同名的計算科學結構命名。CREATE
INDEX語句時,默認就是在創建b-tree索引。沒有特別規定可用於任何情況。
2.
點陣圖索引(bitmap
index)
點陣圖索引特定於該列只有幾個枚舉值的情況,比如性別欄位,標示欄位比如只有0和1的情況。
3.
基於函數的索引
比如經常對某個欄位做查詢的時候是帶函數操作的,那麼此時建一個函數索引就有價值了。
4.
分區索引和全局索引
這2個是用於分區表的時候。前者是分區內索引,後者是全表索引
5.
反向索引(REVERSE)
這個索引不常見,但是特定情況特別有效,比如一個varchar(5)位欄位(員工編號)含值
(10001,10002,10033,10005,10016..)
這種情況默認索引分布過於密集,不能利用好伺服器的並行
但是反向之後10001,20001,33001,50001,61001就有了一個很好的分布,能高效的利用好並行運算。
6.HASH索引
HASH索引可能是訪問資料庫中數據的最快方法,但它也有自身的缺點。集群鍵上不同值的數目必須在創建HASH集群之前就要知道。需要在創建HASH集群的時候指定這個值。使用HASH索引必須要使用HASH集群。
『叄』 oracle 怎樣添加索引
對三個欄位建立索引:
create index Stuname on student(name);
create index Stusex on student(sex);
create index Stugrade on student(grade);
注意的問題,考慮是不是要建立唯一索引(unique),如果有學號的話,可以考慮建立唯一索引引。
再就是對經常查詢,但又相對穩定的可以建立聚簇索引,提高查詢效率
『肆』 oracle資料庫索引種類,分別什麼情況下使用
1. b-tree索引
Oracle資料庫中最常見的索引類型是b-tree索引,也就是B-樹索引,以其同名的計算科學結構命名。CREATE
INDEX語句時,默認就是在創建b-tree索引。沒有特別規定可用於任何情況。
2. 點陣圖索引(bitmap index)
點陣圖索引特定於該列只有幾個枚舉值的情況,比如性別欄位,標示欄位比如只有0和1的情況。
3. 基於函數的索引
比如經常對某個欄位做查詢的時候是帶函數操作的,那麼此時建一個函數索引就有價值了。
4. 分區索引和全局索引
這2個是用於分區表的時候。前者是分區內索引,後者是全表索引
5. 反向索引(REVERSE)
這個索引不常見,但是特定情況特別有效,比如一個varchar(5)位欄位(員工編號)含值
(10001,10002,10033,10005,10016..)
這種情況默認索引分布過於密集,不能利用好伺服器的並行
但是反向之後10001,20001,33001,50001,61001就有了一個很好的分布,能高效的利用好並行運算。
6.HASH索引
HASH索引可能是訪問資料庫中數據的最快方法,但它也有自身的缺點。集群鍵上不同值的數目必須在創建HASH集群之前就要知道。需要在創建HASH集群的時候指定這個值。使用HASH索引必須要使用HASH集群。
『伍』 oracle 索引建立後如何使用。
索引是程序自動判斷是否調用的,建立完索引,直接使用查詢語句即可:
select * from als_img where img_date=『xxx』
『陸』 oracle 資料庫如何建立索引 如何用索引
創建索引語法:
CREATE [UNIQUE] | [BITMAP] INDEX index_name
--unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2
--bitmap,創建點陣圖索引
[ASC|DESC],…] | [express])[TABLESPACE tablespace_name][PCTFREE n1]
--指定索引在數據塊中空閑空間
[STORAGE (INITIAL n2)][NOLOGGING]
--表示創建和重建索引時允許對表做DML操作,默認情況下不應該使用
[NOLINE][NOSORT];
--表示創建索引時不進行排序,默認不適用,如果數據已經是按照該索引順序排列的可以使用
(6)oracle索引的使用方法擴展閱讀:
1、如果有兩個或者以上的索引,其中有一個唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引
2、至少要包含組合索引的第一列(即如果索引建立在多個列上,只有它的第一個列被where子句引用時,優化器才會使用該索引)
3、小表不要簡歷索引
4、對於基數大的列適合建立B樹索引,對於基數小的列適合簡歷點陣圖索引
5、列中有很多空值,但經常查詢該列上非空記錄時應該建立索引
6、經常進行連接查詢的列應該創建索引
7、使用create index時要將最常查詢的列放在最前面
8、LONG(可變長字元串數據,最長2G)和LONG RAW(可變長二進制數據,最長2G)列不能創建索引
9、限製表中索引的數量(創建索引耗費時間,並且隨數據量的增大而增大;索引會佔用物理空間;當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度)
『柒』 oracle的SQL索引使用
1,第一次查詢慢,以後就快了,主要是因為第一次要進行磁碟操作,以後數據被cache到內存中了,不在操作磁碟,所以就快了。
2,對於你說的這四種查詢,where條件中的a=a估計你是舉例子這樣寫的吧。實際上應該是a=變數A。其他的b,c,d也是這樣。那麼這種語句都是可以利用你說的復合索引的。如果是RBO優化器,這四句都應該用索引。但是oracle現在推薦的CBO優化器不能保證你都走索引。
3,到底用沒用索引,你可以從v$sqlaera中找到你的語句對應的hash_value,然後從v$sql_plan中找到語句的執行計劃,通過執行計劃確認你的語句是不是使用了索引。
具體語句你可以類似如下寫法:
select
hash_value,sql_text
from
v$sqlarea
where
upper(sql_text)
like
'%你需要查找的sql語句的特徵片段%'
select
*
from
v$sql_plan
where
hash_value
=
上一句查到的hash_value
『捌』 Oracle創建索引SQL簡單的例子,在表中的指定欄位和如何使用索引呢
創建索引:create index emp_id1(索引名) on emp(empno,ename,deptno) ;
在創建索引時需要制定所在的表的列名,即你要在哪個或者哪些列上創建索引!
使用索引:索引一般是在查詢時由資料庫優化器自動進行判斷是否使用,就是說就算你在某個列上創建了索引,當你在查詢這個表時資料庫也不一定會使用索引,因為有時候需要查詢的范圍比較大,如全表查詢,這時資料庫優化器會去判斷使用索引和不使用索引哪個效率高,當然是不使用索引效率高啦!所以說一般查詢時是不要指定索引的,不過索引還是得創建的!
雖說查詢時不推薦指定索引,但還是可以指定的:SELECT * FROM stuMarks (INDEX=IX_writtenExam) WHERE writtenExam BETWEEN 60 AND 9
『玖』 oracle資料庫添加索引怎麼使用
索引建立代碼:
CREATEINDEX命令語法:
CREATEINDEX
CREATE[unique]INDEX[user.]index
ON[user.]table(column[ASC|DESC][,column
[ASC|DESC]]...)
[CLUSTER[scheam.]cluster]
[INITRANSn]
[MAXTRANSn]
[PCTFREEn]
[STORAGEstorage]
[TABLESPACEtablespace]
[NOSORT]
Advanced
其中:
schemaORACLE模式,預設即為當前帳戶
index索引名
table創建索引的基表名
column基表中的列名,一個索引最多有16列,long列、longraw
列不能建索引列
DESC、ASC預設為ASC即升序排序
CLUSTER指定一個聚簇(Hashcluster不能建索引)
INITRANS、MAXTRANS指定初始和最大事務入口數
Tablespace表空間名
STORAGE存儲參數,同createtable中的storage.
PCTFREE索引數據塊空閑空間的百分比(不能指定pctused)
NOSORT不(能)排序(存儲時就已按升序,所以指出不再排序)