1.建立表
create table zztest
( id number not null,
service_tpyeid varchar2(22),
totalprice number,
constraint test_pk primary key (id)
);
2.建立索引
create index testname on zztest (service_tpyeid);
3.刪除索引
drop index testname;
4.監控索引使用情況
alter index testname monitoring usage;
5.檢視索引使用狀態
select table_name,index_name,used,t.* from v$object_usage t /* where t.index_name='testname' */;
其中,testname必須大寫;
used 為yes表示已使用,為no表示未使用
注意:select * from v$object_usage; 只能檢視當前使用者下被監控的索引資訊。即使sys、system使用者也不能檢視其它使用者的資訊。
6.強制使用索引
select /*+index(zztest testname)*/t.service_tpyeid,t.id,t.totalprice from zztest t where t.service_tpyeid='f82f28bcad934a5d';
注意:/*+index(zztest testname)*/中間不能有空格
7.使索引失效
select t.service_tpyeid,t.id,t.totalprice from zztest t where t.service_tpyeid like '%f82f28bcad934a5d';
失效的方式有多種,如下(沒有每乙個都進行確認,%已確認,其他待確認):
1,使用不等號<>
2,單獨的》,<,(有時會用到,有時不會)
3,like "%_" 百分號在前.
4,表沒分析.
5,單獨引用復合索引裡非第一位置的索引列.
6,字元型字段為數字時在where條件裡不新增引號.
7,對索引列進行運算.需要建立函式索引.
8,not in ,not exist.
9,當變數採用的是times變數,而表的字段採用的是date變數時.或相反情況。
10, 索引失效。
11,基於cost成本分析(oracle因為走全表成本會更小):查詢小表,或者返回值大概在10%以上
12,有時都考慮到了 但就是不走索引,drop了從建試試在
13,b-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null 都會走
14,聯合索引 is not null 只要在建立的索引列(不分先後)都會走, in null時 必須要和建立索引第一列一起使用,當建立索引第一位置條件是is null 時,其他建立索引的列可以是is null(但必須在所有列都滿足is null的時候),或者=乙個值;當建立索引的第一位置是=乙個值時,其他索引列可以是任何情況(包括is null =乙個值),以上兩種情況索引都會走。其他情況不會走。
8.重建失效的索引
alter index 索引名 rebuild 【online】
如:alter index testname rebuild;
9.取消監控某乙個索引
暫時沒找到方法
注意:1.監控器monitor只能統計到截止當前時間,索引a的使用狀態,如果存在某sql使用了索引a,那麼監控就會修改used=yes,即使有sql使索引失效,查詢v$object_usage時得到的used也可能是yes。要檢視某個sql是否使用索引,必須重新執行以下步驟:
---1).重建索引
alter index testname rebuild;
---2).重新加入監控
alter index testname monitoring usage;
---3).要檢視的sql
select t.service_tpyeid,t.id,t.totalprice from zztest t where t.service_tpyeid like '%f82f28bcad934a5d';
---4).檢視監控
select table_name,index_name,used from v$object_usage t;
2.如果要檢視程式是否使用索引,需要在啟動項目前將索引加入監控。待程式執行一段時間後再檢視監控情況即可。
以上是個人測試的結果,如有問題請大神指出原因。
索引的使用
1 索引作用 在索引列上,除了上面提到的有序查詢之外,資料庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。特別是當資料量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍。例如,有3個未索引的表t1 t2 t3,分別只包含列c1 c2 c3,每個表分別含有1000行資料組成,指為1...
索引的使用
主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。唯一性索引列允許空值,而主鍵列不允許為空值。主鍵列在建立時,已經預設為空值 唯一索引了。乙個表最多只能建立乙個主鍵,但可以建立多個唯一索引。主鍵更適合那些不容易更改的唯一標識,如自...
索引的使用
資料庫表的資訊是存在在檔案中的,每個檔案中有很多記錄,你新增一條記錄,檔案中就會多一條記錄。如果要查詢一條記錄怎麼查詢呢?你會開啟檔案讀取檔案內容,然後看看是不是你要的記錄,查詢任何記錄都要從前向後去比較。就像乙個房間有很多人,你知道要找的人在這個房間,但是具體在什麼位置你不知道,你只有乙個乙個看,...