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

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';

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

1.Oracle索引之B*Tree索引。
常規索引,多用于oltp系統,快速定位行,應建立于高cardinality列(即列的唯一值除以行數為一個很大的值,存在很少的相同值)。Create index indexname on tablename(columnname[columnname...])

2.Oracle索引之反向索引。
B*Tree的衍生產物,應用于特殊場合,在ops環境加序列增加的列上建立,不適合做區域掃描。
Create index indexname on tablename(columnname[columnname...]) reverse

3.Oracle索引之降序索引。
B*Tree的衍生產物,應用于有降序排列的搜索語句中,索引中儲存了降序排列的索引碼,提供了快速的降序搜索。
Create index indexname on tablename(columnname DESC[columnname...])

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

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

5.Oracle索引之函數索引。
B*Tree的衍生產物,應用于查詢語句條件列上包含函數的情況,
索引中儲存了經過函數計算的索引碼值。可以在不修改應用程序的基礎上能提高查詢效率。

6.Oracle索引創建策略
1)導入數據后再創建索引
2)不需要為很小的表創建索引
3)對于取值范圍很小的字段(比如性別字段)應當建立位圖索引
4)限制表中的索引的數目
5)為索引設置合適的PCTFREE值
6)存儲索引的表空間最好單獨設定

唯一索引和不唯一索引都只是針對B樹索引而言. Oracle最多允許包含32個字段的復合索引。由此估計出一個查詢如果使用某個索引會需要讀入的數據塊塊數。需要讀入的數據塊越多,則cost越大,Oracle也就越有可能不選擇使用index

三、Oracle索引實用原則
1.能用唯一索引,一定用唯一索引
2.能加非空,就加非空約束
3.一定要統計表的信息,索引的信息,柱狀圖的信息。
4.聯合索引的順序不同,影響索引的選擇,盡量將值少的放在前面
只有做到以上四點,數據庫才會正確的選擇執行計劃。

【編輯推薦】

  1. Oracle索引的實際操作步驟
  2. Oracle索引聚簇表的數據加載的創建
  3. 分析Oracle索引掃描四大類
  4. Oracle索引如何提高數據庫的查詢效率
  5. Oracle索引原理
責任編輯:王婧瑤 來源: 互聯網
相關推薦

2010-04-29 12:46:42

Oracle SQL

2010-09-10 11:02:35

敏捷宣言

2009-04-30 09:45:03

Oracle索引限制

2010-09-07 17:36:37

DB2索引設計準則

2012-05-15 10:35:35

HTML5

2022-01-13 09:00:00

響應式網頁設計網站工具

2019-04-15 13:40:47

大數據分析建模數據數據分析

2011-05-20 10:52:50

SQL Server 索引

2011-04-08 15:40:01

Oracle認證

2011-03-18 14:54:52

SQL Server索引結構

2010-03-30 18:11:24

Oracle創建

2010-10-26 17:34:03

Oracle索引

2022-08-21 21:39:06

程序員建議

2013-05-30 09:19:31

災難恢復故障排查運維

2009-11-17 13:49:46

Oracle prim

2011-06-21 17:36:10

SEO

2010-04-22 14:29:12

Oracle同義詞

2022-04-07 09:04:09

Chrome瀏覽器Chrome 擴展

2011-04-14 13:18:11

Oracle

2010-04-23 13:01:43

Oracle報表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产精品久久 | 国产精品日韩一区二区 | 中文字幕一级毛片视频 | 农村黄性色生活片 | 国产中文字幕在线观看 | 人人爽日日躁夜夜躁尤物 | 精品国产区 | 欧美日一区二区 | 久久一区二区三区免费 | 欧美一二三区 | 日韩久久久久久 | 午夜一级做a爰片久久毛片 精品综合 | 人人鲁人人莫人人爱精品 | 羞视频在线观看 | 中文亚洲视频 | 久久新 | 日韩在线视频免费观看 | 亚洲毛片 | 久久久久久久电影 | 久久久久亚洲 | 玖玖爱365| www.伊人.com | 成人精品视频在线观看 | 久久久久久国产精品 | 日韩欧美手机在线 | 色先锋影音 | 在线男人天堂 | 国产精品区二区三区日本 | 国产激情亚洲 | 免费在线观看一区二区三区 | 亚洲欧美国产视频 | 91xxx在线观看| 久久精品国产一区二区三区 | 国产精品久久久久久久粉嫩 | 97av视频在线| 九九热精品视频在线观看 | 91一区二区三区 | 欧美日韩高清在线观看 | 亚洲精品欧美 | 日韩一区精品 | 亚洲在线一区二区三区 |