自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle 9i全索引掃描和函數(shù)索引一起工作的原理

數(shù)據(jù)庫(kù) Oracle
以下的文章主要是介紹如何用Oracle 9i全索引掃描快速訪問(wèn)相關(guān)數(shù)據(jù)的實(shí)際操作步驟,以及如何用函數(shù)索引來(lái)調(diào)用全索引掃描的相關(guān)實(shí)際操作。

如果你度數(shù)據(jù)庫(kù)的相關(guān)實(shí)際操作很感興趣的話沒(méi)那么你肯定會(huì)知道在Oracle9i之前,Oracle 9i全索引掃描只有再創(chuàng)建相關(guān)索引時(shí),沒(méi)有空值的時(shí)候才可以進(jìn)行使用,也就是說(shuō),Oracle建立索引時(shí)必須用一個(gè)NOT NULL子句才可以使用該索引。由于Oracle9i支持用函數(shù)(function-based)索引實(shí)現(xiàn)的唯索索引掃描,這種情況大大改觀。

簡(jiǎn)單回歸一下,函數(shù)索引是Oracle8的一個(gè)重要改進(jìn),因?yàn)樗峁┝艘环N有效的消除無(wú)必要長(zhǎng)表全掃描的機(jī)制,由于函數(shù)索引可以在任何查詢語(yǔ)句中的WHERE子句中精確復(fù)制,Oracle總會(huì)用一個(gè)索引來(lái)匹配上SQL查詢的WHERE子句。

現(xiàn)在,我要會(huì)用一個(gè)student表來(lái)舉一個(gè)簡(jiǎn)單的例子來(lái)解釋Oracle 9i全索引掃描如何與函數(shù)索引一起工作的過(guò)程。

創(chuàng)建student表

  1. (student_name varchar2(40), date_of_birth date);  

使用這個(gè)表,創(chuàng)建與表中所有列相關(guān)聯(lián)的函數(shù)索引。在本例中,該函數(shù)為initcap(即大寫每個(gè)單詞的首字母)和to_char(即把一個(gè)數(shù)字變成字符):

  1. create index whole_student  
  2. on student  
  3. (initcap(student_name), to_char(date_of_birth,’MM-DD-YY’));  

定義完函數(shù)索引后,Oracle9i中任何可以引用這些列(column)的SQL語(yǔ)句都可以使用Oracle 9i全索引掃描。下面是SQL匹配函數(shù)索引的查詢例子:

  1. select * from student  
  2. where initcap(student_name) = ‘Jones’;  
  3. select * from student  
  4. where to_char(date_of_birth,’MM-DD=YY’) = ’04-07-85’;  

用函數(shù)索引來(lái)調(diào)用全索引掃描

Oracle9i只要可能就會(huì)使用函數(shù)索引并在函數(shù)索引的基礎(chǔ)上調(diào)用全索引掃描。如果SQL優(yōu)化器統(tǒng)計(jì)結(jié)果表明使用全索引掃描的速度將會(huì)超過(guò)通過(guò)索引的b-樹訪問(wèn)的速度,那么Oracle9i就會(huì)這么做。

下面是用函數(shù)索引調(diào)用唯索掃描的準(zhǔn)則。所有的SQL謂詞匹配索引中的列,查詢必須從表中返回足夠多的行,這樣做的目的是為了讓代價(jià)優(yōu)化器(cost-based optimizer)來(lái)判斷全索引掃描是否要比傳統(tǒng)的索引訪問(wèn)方法要快。是否調(diào)用全索引掃描的決定取決于下面幾個(gè)參數(shù)設(shè)置:

代價(jià)優(yōu)化器的適當(dāng)統(tǒng)計(jì)數(shù)字——這個(gè)計(jì)劃(schema)最近已經(jīng)分析過(guò)了,而且optimizer_mode參數(shù)不能設(shè)置為RULE。

索引的并行程度——注意索引的并行程度是獨(dú)立設(shè)置的;索引并沒(méi)有繼承表的并行程度。

optimizer_index_cost_adj的設(shè)置——它控制代價(jià)優(yōu)化器是否傾向于Oracle 9i全索引掃描。

db_file_multiblock_read_count的設(shè)置——這個(gè)參數(shù)影響到全索引掃描的代價(jià)。這個(gè)值越高,全索引掃描的代價(jià)也就會(huì)越“便宜”。

索引的直方圖表示——對(duì)偏移(skewed)索引,它幫助代價(jià)優(yōu)化器評(píng)估查詢返回的行數(shù)。

Oracle的一個(gè)重要提高

在函數(shù)索引基礎(chǔ)上的快速全索引掃描是Oracle9i的另一個(gè)提高性能的途徑。當(dāng)數(shù)據(jù)庫(kù)遷移到Oracle9i時(shí),許多數(shù)據(jù)庫(kù)自動(dòng)開始使用這個(gè)新的執(zhí)行計(jì)劃。不過(guò),當(dāng)SQL代價(jià)優(yōu)化器決定是否選擇全索引掃描時(shí),還要考慮幾個(gè)因素。Oracle專業(yè)人員需要適當(dāng)設(shè)置參數(shù),以確保代價(jià)優(yōu)化器不會(huì)用不合適的方式使用快速Oracle 9i全索引掃描——這一點(diǎn)需要特別注意。

【編輯推薦】

  1. Oracle細(xì)粒度如何進(jìn)行訪問(wèn)
  2. Oracle數(shù)據(jù)庫(kù)的異構(gòu)服務(wù)原理描述
  3. Oracle性能優(yōu)化的要點(diǎn)
  4. Oracle使用hints的調(diào)整機(jī)制實(shí)操
  5. Oracle移植到mysql中,應(yīng)注意的事項(xiàng)
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2010-04-14 16:22:42

Oracle 9i

2009-06-19 15:11:34

DWR和Spring

2011-01-20 11:42:49

同事

2011-05-17 15:41:51

oracle 9i卸載

2022-06-06 09:00:00

Kubernete容器虛擬機(jī)

2020-10-12 08:02:04

開發(fā)人員開發(fā)編碼

2010-04-27 17:58:17

Oracle 9i

2009-03-17 13:59:26

ORA-01578壞塊Oracle

2010-04-13 10:29:12

Oracle 9i

2010-04-14 09:25:08

Oracle 9i創(chuàng)建

2009-11-11 09:13:11

Oracle索引掃描

2013-08-19 11:31:43

2013-07-29 14:15:07

職場(chǎng)痛并快樂(lè)團(tuán)隊(duì)協(xié)作

2009-01-06 09:14:08

8i9ioracle

2024-01-03 09:03:40

MySQL索引數(shù)據(jù)庫(kù)

2010-04-16 14:30:13

Oracle 9i

2009-11-03 14:22:07

Oracle密碼

2021-12-08 07:06:54

命令 Fastapi Celery

2010-04-13 11:31:02

Oracle 9i e

2010-04-14 09:16:39

Oracle 9i
點(diǎn)贊
收藏

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