oracle 資料庫如何建立索引 如何用索引

2021-10-07 02:25:21 字數 2857 閱讀 1741

我現在有乙個sql語句 

select faqid,

faqname,

type,

creator,

toquestion,

supercode

from t_kbs_faq t

where type = '1' 

<[and faqid = :faqid]>

<[and faqname like '%' ||:faqname || '%']>

<[and creator = :creator]>

<[and supercode=:supercode]>

<[and toquestion=:toquestion]>

<%:tokngtype%>

現在資料過大 導致查詢很慢,如何優化? 要建立幾個字段建立索引怎麼樣建立, 建立好了如何使用 sql語句又該怎寫?

name

id

rowid

rowid

id

王一

1

x001

x001

1

王二

2

x002

x002

2

王三

3

x003

x003

3

索引

select * from 表 where id = 3

索引是由where條件觸發的 ,此查詢語句中指定id=3,因為有索引直接從索引段中找到id=3對應的rowid,然後就可以快速用rowid快速找到表中的記錄,如果沒有索引,就是一行一行的查詢id=3的記錄

(1) create index 索引名 on 表(欄位名);     //建立b樹索引,一般用的oltp中

(2) create bitmap index 索引名 on 表(欄位名);   //建立位圖索引,一般用的olap中

(3) create index 索引名 on 表名 (substr(字段,1,10))  

//建立函式索引,有些時候呢,咱們的搜尋條件要加上函式,這種情況呢,普通索引就不能解發了,就要建立函式索引

(4) create index 索引名 on 表名 (欄位1,欄位2......欄位n);

//復合索引,當條件中,經常去查詢多個條件時,可以把多個條件放在乙個索引中

(5)  create index 索引名 on 表(字段 desc);   //排序後建立索引

(6) create index 索引名 on 表名 (字段) reverse; //反轉索引,消除熱點塊

(7) create index 索引名 on 表名(字段) local;   //建立分割槽本地索引

(8) create index 索引名 on 表名 (字段) global;   //建立分割槽全域性索引

1、如果有兩個或者以上的索引,其中有乙個唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引

2、至少要包含組合索引的第一列(即如果索引建立在多個列上,只有它的第乙個列被where子句引用時,優化器才會使用該索引)

3、小表不要簡歷索引

4、對於基數大的列適合建立b樹索引,對於基數小的列適合簡歷位圖索引

5、列中有很多空值,但經常查詢該列上非空記錄時應該建立索引

6、經常進行連線查詢的列應該建立索引

7、使用create index時要將最常查詢的列放在最前面

8、long(可變長字串資料,最長2g)和long raw(可變長二進位制資料,最長2g)列不能建立索引

9、限制表中索引的數量(建立索引耗費時間,並且隨資料量的增大而增大;索引會占用物理空間;當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度)

檢視指定表上現有索引詳情

select t.index_name,t.column_name,i.index_type  from user_ind_columns t,user_indexes i where t.index_name = i.index_name and  t.table_name='表名';

檢視索引及列

select t.index_name,t.status from user_indexes t where t.index_name in ();

檢視指定分割槽表的所有索引

select t.index_name,t.column_name,i.index_type from 

user_ind_columns t,user_indexes i where t.index_name = i.index_name and  

t.table_name='表名';

查詢分割槽索引狀態

select partition_name,status from dba_ind_partitions where index_name='';

valid:當前索引有效

n/a :分割槽索引 有效

unusable:索引失效

重新建立索引

alter index 使用者.索引 rebuild;

oracle資料庫建立索引

系統中有一張記錄登入和登出的日誌表,時間長了之後,資料量很大,又沒有歷史表。而客戶端登入時都會去資料庫查詢使用者上次登入的ip和時間,由於沒有索引所以很慢有時侯。故需要對此表加入索引,一提高查詢效率 首先先查下表中存在哪些索引 select index name from all indexes w...

資料庫如何建立索引

語法 create 索引型別 index 索引名稱 on 表名 列名 with fillfactor 填充因子值0 100 gouse 庫名 goif exists select from sysindexes where name ix test tname 檢測是否已經存在ix test tna...

關於ORACLE建立資料庫索引

由於公司電子商務 平台版本老化,且使用oracle資料庫,前期dba在設計資料庫建表結構時候存在一定的問題,對索引的使用不夠重視,大致資料的查詢比較慢 當然也有一些由於使用hibernate中不夠重視 color red oracle採用自下而上的順序解 析where子句,根據這個原理,表之間的連線...