成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle索引整理的詳細描述

數(shù)據(jù)庫 Oracle
以下的文章主要是介紹Oracle索引的整理,同時本文也涉及到Oracle的索引陷阱以及各種索引使用場合及建議等相關(guān)內(nèi)容的介紹。

以下的文章主要是對Oracle索引整理的描述,其中包含了Oracle的索引陷阱,以及各種索引使用場合以及建議,還有能用唯一索引,一定用唯一索引有哪些的詳細內(nèi)容的介紹,以下就好似相關(guān)內(nèi)容的介紹。

一、Oracle的索引陷阱

一個表中有幾百萬條數(shù)據(jù),對某個字段加了索引,但是查詢時性能并沒有什么提高,這主要可能是Oracle的索引限制造成的。

Oracle的索引有一些索引限制,在這些索引限制發(fā)生的情況下,即使已經(jīng)加了索引,Oracle還是會執(zhí)行一次全表掃描,查詢的性能不會比不加Oracle索引有所提高,反而可能由于數(shù)據(jù)庫維護索引的系統(tǒng)開銷造成性能更差。

下面是一些常見的索引限制問題。

1、使用不等于操作符(<>, !=)

下面這種情況,即使在列dept_id有一個索引,查詢語句仍然執(zhí)行一次全表掃描

 

  1. select * from dept where staff_num <> 1000; 

但是開發(fā)中的確需要這樣的查詢,難道沒有解決問題的辦法了嗎?

有!

通過把用 or 語法替代不等號進行查詢,就可以使用Oracle索引,以避免全表掃描:上面的語句改成下面這樣的,就可以使用索引了。

 

  1. select * from dept shere staff_num < 1000 or dept_id > 1000; 

2、使用 is null 或 is not null

使用 is null 或is nuo null也會限制索引的使用,因為數(shù)據(jù)庫并沒有定義null值。如果被索引的列中有很多null,就不會使用這個索引(除非索引是一個位圖索引,關(guān)于位圖索引,會在以后的blog文章里做詳細解釋)。在sql語句中使用null會造成很多麻煩。

解決這個問題的辦法就是:建表時把需要索引的列定義為非空(not null)

3、使用函數(shù)

如果沒有使用基于函數(shù)的索引,那么where子句中對存在Oracle索引的列使用函數(shù)時,會使優(yōu)化器忽略掉這些索引。下面的查詢就不會使用索引:

 

  1. select * from staff where trunc(birthdate) 
    = '01-MAY-82'; 

但是把函數(shù)應(yīng)用在條件上,索引是可以生效的,把上面的語句改成下面的語句,就可以通過索引進行查找。

 

  1. select * from staff where birthdate < 
    (to_date('01-MAY-82') + 0.9999); 

4、比較不匹配的數(shù)據(jù)類型

比較不匹配的數(shù)據(jù)類型也是難于發(fā)現(xiàn)的性能問題之一。

下面的例子中,dept_id是一個varchar2型的字段,在這個字段上有Oracle索引,但是下面的語句會執(zhí)行全表掃描。

 

  1. select * from dept where dept_id = 900198

這是因為Oracle會自動把where子句轉(zhuǎn)換成to_number(dept_id)=900198,就是3所說的情況,這樣就限制了索引的使用。

把SQL語句改為如下形式就可以使用索引

 

  1. select * from dept where dept_id = '900198'

二、各種索引使用場合及建議

(1)B*Tree索引。

常規(guī)索引,多用于oltp系統(tǒng),快速定位行,應(yīng)建立于高cardinality列(即列的唯一值除以行數(shù)為一個很大的值,存在很少的相同值)。

 

  1. Create index indexname on tablename(columnname[columnname...]) 

(2)反向Oracle索引。

B*Tree的衍生產(chǎn)物,應(yīng)用于特殊場合,在ops環(huán)境加序列增加的列上建立,不適合做區(qū)域掃描。

 

  1. Create index indexname on tablename
    (columnname[columnname...]) reverse 

(3)降序索引。

B*Tree的衍生產(chǎn)物,應(yīng)用于有降序排列的搜索語句中,索引中儲存了降序排列的索引碼,提供了快速的降序搜索。

 

  1. Create index indexname on tablename(columnname DESC[columnname...]) 

(4)位圖索引。

位圖方式管理的索引,適用于OLAP(在線分析)和DSS(決策處理)系統(tǒng),應(yīng)建立于低cardinality列,

適合集中讀取,不適合插入和修改,提供比B*Tree索引更節(jié)省的空間。

 

  1. Create BITMAP index indexname on tablename(columnname[columnname...]) 

在實際應(yīng)用中,如果某個字段的值需要頻繁更新,那么就不適合在它上面創(chuàng)建位圖索引。

在位圖Oracle索引中,如果你更新或插入其中一條數(shù)值為N的記錄,

那么相應(yīng)表中數(shù)值為N的記錄(可能成百上千條)全部被Oracle鎖定,

這就意味著其它用戶不能同時更新這些數(shù)值為N的記錄,其它用戶必須要等***個用戶提交后,

才能獲得鎖,更新或插入數(shù)據(jù),bitmap index它主要用于決策支持系統(tǒng)或靜態(tài)數(shù)據(jù)。

(5)函數(shù)索引。

B*Tree的衍生產(chǎn)物,應(yīng)用于查詢語句條件列上包含函數(shù)的情況,

索引中儲存了經(jīng)過函數(shù)計算的索引碼值。可以在不修改應(yīng)用程序的基礎(chǔ)上能提高查詢效率。

索引創(chuàng)建策略

1.導(dǎo)入數(shù)據(jù)后再創(chuàng)建索引

2.不需要為很小的表創(chuàng)建索引

3.對于取值范圍很小的字段(比如性別字段)應(yīng)當建立位圖索引

4.限制表中的索引的數(shù)目

5.為索引設(shè)置合適的PCTFREE值

6.存儲索引的表空間***單獨設(shè)定

唯一索引和不唯一索引都只是針對B樹索引而言.

Oracle最多允許包含32個字段的復(fù)合Oracle索引

由此估計出一個查詢?nèi)绻褂媚硞€索引會需要讀入的數(shù)據(jù)塊塊數(shù)。

需要讀入的數(shù)據(jù)塊越多,則 cost 越大,Oracle 也就越有可能不選擇使用 index

三、能用唯一索引,一定用唯一索引

能加非空,就加非空約束

一定要統(tǒng)計表的信息,索引的信息,柱狀圖的信息。

聯(lián)合索引的順序不同,影響Oracle索引的選擇,盡量將值少的放在前面

只有做到以上四點,數(shù)據(jù)庫才會正確的選擇執(zhí)行計劃。

【編輯推薦】

  1. Oracle用戶密碼的修改方案
  2. Oracle表列的修改具體步驟介紹
  3. Oracle 多表關(guān)聯(lián)如何更新多個字段
  4. Oracle數(shù)據(jù)庫的重復(fù)數(shù)據(jù)刪除技術(shù)的優(yōu)勢體現(xiàn)
  5. Oracle undo釋放表空間中的操作步驟
責任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-11-18 11:14:49

2009-08-10 16:40:03

C#索引器

2009-09-14 13:14:49

LINQ序列

2009-09-14 14:58:52

LINQ to XML

2009-09-14 16:33:55

LINQ To XML

2009-09-24 16:19:53

Hibernate應(yīng)用

2009-09-25 14:28:40

Hibernate S

2010-05-10 13:33:11

Oracle存儲過程

2009-10-10 10:04:50

RHEL合法使用

2010-08-03 14:05:26

DB2數(shù)據(jù)集

2010-02-05 16:58:18

Android服務(wù)

2010-09-08 15:10:48

2009-09-08 11:09:39

LINQ數(shù)據(jù)源

2009-10-15 14:59:45

網(wǎng)絡(luò)布線光纖技術(shù)

2009-09-25 11:04:32

Hibernate3實

2009-08-27 15:17:40

C# const變量

2009-08-26 15:53:48

C#擴展方法

2009-09-07 15:15:43

2010-06-23 14:40:57

2009-09-03 17:59:18

C#調(diào)用事件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕av在线一二三区 | 午夜欧美一区二区三区在线播放 | 亚洲成人av| 成人自拍视频网站 | 久久国产成人 | 精品国产网| 亚洲一区综合 | 国产一区二区三区在线看 | 亚洲精品一区中文字幕乱码 | 女人牲交视频一级毛片 | 国产999在线观看 | 久久一区| 日韩福利 | 亚洲免费一区二区 | 女女爱爱视频 | 欧美高清hd| h片在线观看免费 | 中文字幕在线视频观看 | 久久久国产精品一区 | 精品欧美一区二区精品久久久 | 国产精品揄拍一区二区 | 超碰在线97国产 | 一级a性色生活片久久毛片 一级特黄a大片 | 日日爽| 亚洲综合国产精品 | 午夜av在线 | 国产中文字幕网 | 亚洲成人精品久久 | 精品一区二区在线看 | 欧美性极品xxxx做受 | 欧美久久久久久 | 高清欧美性猛交 | 在线看片福利 | 亚洲第一视频 | 99久久精品免费看国产四区 | 国产精品成人在线播放 | 激情综合五月 | 国产精品免费一区二区三区四区 | 精品三级在线观看 | 91九色在线观看 | 91porn国产成人福利 |