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

使用Oracle索引時的注意事項大全

數據庫 Oracle
本文主要介紹了一些使用Oracle索引時的注意事項,以及索引的使用規則和一些使用建議,希望能夠對您有所幫助。

當數據表的記錄較多時,Oracle數據庫使用索引來提高查詢的速度。關于索引的使用可以參考一下這篇文章:為Oracle數據表建立索引的一個簡單例子,本文我們主要介紹一些使用索引時應該注意的事項,接下來就讓我們一起來了解一下吧。

一、Oracle的索引陷阱

一個表中有幾百萬條數據,對某個字段加了索引,但是查詢時性能并沒有什么提高,這主要可能是oracle的索引限制造成的。Oracle的索引有一些索引限制,在這些索引限制發生的情況下,即使已經加了索引,oracle還是會執行一次全表掃描,查詢的性能不會比不加索引有所提高,反而可能由于數據庫維護索引的系統開銷造成性能更差。  

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

下面這種情況,即使在列dept_id有一個索引,查詢語句仍然執行一次全表掃描:select * from dept where staff_num <> 1000; 有!

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

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

2、使用 is null 或 is not null

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

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

3、使用函數

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

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

4、比較不匹配的數據類型下面的例子中,dept_id是一個varchar2型的字段,在這個字段上有索引,但是下面的語句會執行全表掃描。

select * from dept where dept_id = 900198;

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

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

select * from dept where dept_id = '900198';

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

(1)B*Tree索引。

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

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

(2)反向索引。

B*Tree的衍生產物,應用于特殊場合,在ops環境加序列增加的列上建立,不適合做區域掃描。

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

(3)降序索引。

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

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

(4)位圖索引。

位圖方式管理的索引,適用于OLAP(在線分析)和DSS(決策處理)系統,應建立于低cardinality列,適合集中讀取,不適合插入和修改,提供比B*Tree索引更節省的空間。Create BITMAP index indexname on tablename(columnname[columnname...])

在實際應用中,如果某個字段的值需要頻繁更新,那么就不適合在它上面創建位圖索引。在位圖索引中,如果你更新或插入其中一條數值為N的記錄,那么相應表中數值為N的記錄(可能成百上千條)全部被Oracle鎖定,這就意味著其它用戶不能同時更新這些數值為N的記錄,其它用戶必須要等***個用戶提交后,才能獲得鎖,更新或插入數據,bitmap index它主要用于決策支持系統或靜態數據。

(5)函數索引。

B*Tree的衍生產物,應用于查詢語句條件列上包含函數的情況,

索引中儲存了經過函數計算的索引碼值。可以在不修改應用程序的基礎上能提高查詢效率。

索引創建策略

1.導入數據后再創建索引。

2.不需要為很小的表創建索引。

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

4.限制表中的索引的數目。

5.為索引設置合適的PCTFREE值。

6.存儲索引的表空間***單獨設定。

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

Oracle最多允許包含32個字段的復合索引需要讀入的數據塊越多,則 cost 越大,Oracle 也就越有可能不選擇使用index。

三、索引使用規則:

(1)能用唯一索引,一定用唯一索引

(2)能加非空,就加非空約束

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

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

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

關于Oracle數據庫使用索引的注意事項就介紹到這里了,希望本次的介紹能夠帶給您一些收獲,謝謝!

【編輯推薦】

  1. 如何在lvm映射的裸設備上安裝Oracle 10數據庫
  2. Oracle數據庫如何定期正確刪除archivelog文件
  3. 介紹幾種大型的Oracle/SQL Server數據庫免費版
  4. 用一些不常見的SQL語句實現讓人意想不到的功能
  5. SQL Server數據庫使用Insert語句實現數據的復制
責任編輯:趙鵬 來源: 火魔網
相關推薦

2010-10-26 17:28:15

創建Oracle索引

2010-07-20 13:02:03

SQL Server索

2010-09-16 09:52:49

CSS display

2009-12-21 09:53:45

連接Oracle

2010-05-07 10:19:48

Oracle 注意事項

2009-10-22 14:07:15

布線施工注意事項

2011-08-04 15:00:46

AmoebaMySQL

2010-05-11 11:03:41

Mysql索引

2011-05-03 16:58:55

噴墨打印機墨水

2010-05-31 12:55:49

MySQL索引

2010-02-03 10:21:46

初學Python

2010-08-10 08:49:32

FlexSDK4

2010-11-26 16:27:01

MySQL使用變量

2011-07-26 09:29:15

Oracle RACASM

2022-06-22 10:19:20

員工談判專家

2010-07-19 14:37:20

SQL Server

2010-01-14 18:19:40

C++語言

2010-01-25 18:12:28

C++

2010-01-26 16:47:47

VC++6.0

2011-05-26 11:22:04

SEO
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干干 | 丁香久久 | 亚洲午夜网 | 天天操夜夜爽 | 精品视频在线观看 | 欧美激情视频一区二区三区在线播放 | 青青草原精品99久久精品66 | 小h片免费观看久久久久 | av免费成人| 伊人在线| 91久久国产综合久久91精品网站 | 日韩免费视频 | 日韩一二三| 欧美一级毛片在线播放 | 国产综合精品一区二区三区 | 日本爱爱 | 亚洲97 | 精品在线免费观看视频 | 久久久久久久久久久福利观看 | 欧美三级三级三级爽爽爽 | 欧美一级片在线观看 | 黄片毛片在线观看 | 久久久久av | 91xxx在线观看 | 国产三级在线观看播放 | 中文字幕第一页在线 | 亚洲国产成人精品久久久国产成人一区 | 欧美日韩久久久 | 久久久国产精品一区 | 欧美激情亚洲天堂 | 国产一级片精品 | 国产高清一区 | 欧美日韩国产一区二区三区 | 亚洲精品乱码久久久久久黑人 | 日本午夜视频 | 中文字幕国产视频 | 99re视频在线免费观看 | 在线播放中文字幕 | 欧美一区二区在线观看 | 午夜资源 | 在线免费黄色小视频 |