oracle索引,主鍵影響查詢速度

來源:互聯網
上載者:User

要提高查詢速度,一般:

1.不需要刪除的欄位,建主鍵;有可能要被刪除的欄位,建索引。

2.假如一次提交5W個號碼,每個都要和資料庫裡90W號碼進行比較5W個號碼中哪些號碼是90W號碼中的。那麼將90W號碼建一個表,一個欄位就是號碼欄位,然後把該欄位設為主鍵即可。

update前100條為0,另外一個程式找狀態為0的,要提高速度,要將這100條(所有條)的ID建索引。

3.不管對什麼欄位建的什麼索引,該欄位只有放在where條件中使用時,索引才生效,假如放到not in或者其他條件中,索引無效。

 

另外,有個語句:

select t1.code,t1.id,t1.content,t1.clid,wg.fnumber,t1.mlevel from (select * from t_busi_pre_mx mxwhere mx.mainid='000' and mx.sjtdid='00' and mx.stus='1' and mx.stype='1' ) t1left join T_CL_TD td on t1.sjtdid=td.tdid left join T_CON_WG wg on td.wgid=wg.wgid where rownum<=wg.fnumber order by mlevel

 

對於sql中紅色字型:(mainid和sjtdid在這裡的都是唯一的,但是在表中不一樣,不知道怎麼說,只想說where後的條件順序不一樣,速度不一樣,對某些欄位加索引,速度更快)

情況1.(此時mianid未建索引)

where sjtdid='00' and mainid='000'                     耗時900ms

情況2.(此時mianid未建索引)

where mainid='000' and sjtdid='00'                     耗時450ms,快了1倍

情況3.(對mainid建索引,mianid是另外一個表的id)

create index t_busi_pre_mx_idx on t_busi_pre_mx (mainid);
where mainid='000' and sjtdid='00'     耗時33ms,相對情況1,快了30倍

 

4.oracle序列,類似sqlserver自增主鍵,是數字類型的。使用序列也可以加快查詢速度。

---建序列:

CREATE SEQUENCE seq_mxid
    INCREMENT BY 1 -- 每次加幾個
    START WITH 1    -- 從1開始計數
    NOMAXVALUE      -- 不設定最大值
    NOCYCLE         -- 一直累加,不迴圈
;

---使用序列

insert into table(id) values(seq_mxid.nextval);

 

我的實驗:

1.clientid(大結果集),sendstatus(小結果集),id(主鍵)都建了索引,表中資料。

    1>.where..and...and條件中,小結果集在前,大結果集在後:

select * from t_busi_presend_mx where sendstatus='3'  and clientid<>'99407769438752120202' order by id

11行被選擇,耗時78.016

    2>.where..and...and條件中,大結果集在前,小結果集在後:

select * from t_busi_presend_mx where  clientid<>'99407769438752120202'  and sendstatus='3'   order by id

 

11行被選擇,耗時49.797

事實證明,在查詢條件中,要把值的個數(ourgetstat =  0  或 1)少的 ,放在條件的最後,比把這個條件放第一個快。

那麼  查詢的時候,  where  ...and...and...and
這種條件排序,就應該把結果集最小的放最後,次小的放倒數第二,最大的放第一個?不對,是過濾條件最多的放在離where最近 。

 

關於索引:

資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。
  例如這樣一個查詢:select * from table1 where id=44。如果沒有索引,必須遍曆整個表,直到ID等於44的這一行被找到為止;有了索引之後(必須是在ID這一列上建立的索引),直接在索引裡面找44(也就是在ID這一列找),就可以得知這一行的位置,也就是找到了這一行。可見,索引是用來定位的。
  索引分為聚簇索引和非聚簇索引兩種,聚簇索引 是按照資料存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。

當增加索引時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因此,當修改操作遠遠多於檢索操作時,不應該建立索引。

索引需要佔物理空間,除了資料表占資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
當對錶中的資料進行增加、刪除和修改的時候,索引也要動態維護,這樣就降低了資料的維護速度。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.