亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

怎樣在Oracle字段上建立并使用索引

2024-08-29 13:51:03
字體:
來源:轉載
供稿:網友
當WHERE子句對某一列使用函數時,除非利用這個簡單的技術強制索引,否則Oracle優化器不能在查詢中使用索引。 通常情況下,假如在WHERE子句中不使用諸如UPPER、REPLACE 或SUBSTRD等函數,就不能對指定列建立特定的條件。但假如使用了這些函數,則會出現一個問題:這些函數會阻礙Oracle優化器對列使用索引,因而與采用索引的情況相比較,查詢會花費更多的時間。 慶幸的是,假如在使用函數的這些列中包含了字符型數據,可以用這樣一種方法修改查詢語句,以達到強制性使用索引,更有效地運行查詢。這篇文章介紹了涉及的技術,并說明了在兩種典型情況下怎樣實現。 大小寫混合情況 在討論由于函數修改了列的內容,如何強制使用索引前,讓我們首先看看為什么Oracle優化器在這種情況下不能使用索引。假定我們要搜尋包含了大小寫混合的數據,如ADDRESS表的NAME列。因為數據是用戶輸入的,我們無法使用已經統一改為大寫的數據。為了找到每一個名為john的地址,我們使用包含了UPPER子句的查詢語句。如下所示:
SQL> select address from address where upper(name) like 'JOHN';
在運行這個查詢語句前,假如我們運行了命令"set autotrace on", 將會得到下列結果,其中包含了執行過程:
ADDRESS cleveland 1 row selected. Execution Plan SELECT STATEMENT TABLE access FULL ADDRESS
可以看到,在這種情況下,Oracle優化器對ADDRESS 表作了一次完整的掃描,而沒有使用NAME 列的索引。這是因為索引是根據列中數據的實際值建立的,而UPPER 函數已經將字符轉換成大寫,即修改了這些值,因此該查詢不能使用這列的索引。優化器不能與索引項比較"JOHN",沒有索引項對應于"JOHN"-只有"john" 。 值得慶幸的是,假如在這種情況下想要強制使用索引,有一種簡便的方法:只要在WHERE 子句中增加一個或多個特定的條件,用于測試索引值,并減少需要掃描的行,但這并沒有修改原來SQL 編碼中的條件。以下列查詢語句為例:
SQL> select address from address where upper(name) like 'JO%' AND (name like 'J%' or name like 'j%');
使用這種查詢語句(已設置AUTOTRACE),可得到下列結果:
ADDRESS cleveland 1 row selected. Execution Plan SELECT STATEMENT CONCATENATION TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I
現在,優化器為WHERE 子句中AND 聯結的兩個語句中每一個語句確定的范圍進行掃描----第二個語句沒有引用函數,因而使用了索引。在兩個范圍掃描后,將運行結果合并。 在這個例子中,假如數據庫有成百上千行,可以用下列方法擴充WHERE 子句,進一步縮小掃描范圍:
select address from address where upper(name) like 'JOHN' AND (name like 'JO%' or name like 'jo%' or name like 'Jo' or name like 'jO' );
得到的結果與以前相同,但是,其執行過程如下所示,表明有4個掃描范圍。
Execution Plan SELECT STATEMENT CONCATENATION TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I
假如試圖進一步提高查詢速度,我們可以在特定的"name like"條件中指明3個或更多的字符。然而,這樣做會使得WHERE子句十分粗笨。因為需要大小寫字符所有可能的組合-joh ,Joh,jOh,joH等等。除此之外,指定一個或兩個字符已足以加快查詢的運行速度了。 現在讓我們看看,當我們引用不同的函數時,怎樣運用這個基本技術。 使用REPLACE的情況 正如名字不總是以大寫輸入一樣,電話號碼也會以許多格式出現: 如 123-456-7890, 123 456 7890,(123)456-7890 等等。 假如在列名為 PHONE_NUMBER中搜尋上述號碼時,可能需要使用函數REPLACE以保證統一的格式。假如在PHONE_NUMBER列中只包含空格、連字符和數字,where 子句可以如下所示:
WHERE replace(replace(phone_number , '-' ) , ' ' ) = '1234567890'
WHERE子句兩次使用REPLACE 函數去掉了連字符和空格,保證了電話號碼是簡單的數字串。然而,該函數阻止了優化器在該列使用索引。因此,我們按如下方法修改WHERE子句,以強制執行索引。
WHERE replace(replace(phone_number, '-' ) , ' ' ) = '1234567890'
AND phone_number like '123% '假如我們知道數據中可能包含圓括號,WHERE 子句會稍微復雜一點。我們可以再增加REPLACE 函數(去掉圓括號、連字符和空格),按如下所示擴充增加的條件:
WHERE replace(replace(replace(replace(phone_number , ' - ' ) ,' '),'( ' ) , ' ) ' ) = '1234567890' AND (phone number like ' 123% ' or phone_number like ' (123% ' ) '
該例強調了巧妙地選用WHERE 子句條件的重要性,而且,這些條件不會改變查詢結果。你的選擇應基于完全了解該列中存在的信息類型。在該例中,我們需要知道 PHONE_NUMBER 數據中存在幾種不同的格式,這樣,我們能夠修改WHERE 子句而不會影響查詢結果。 正確的條件 以后當你碰到包含CHARACTER 數據修改函數列的WHERE 子句時,應考慮怎樣利用增加一個或兩個特定的條件,迫使優化器使用索引。適當地選擇一組特定的條件能減少掃描行,并且強制使用索引不會影響查詢結果----但卻提高了查詢的執行速度。


上一篇:Oracle中找出無用的索引提高DML性能

下一篇:Oracle 10G數據庫的特性簡介(收藏版)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久国产精品| 日韩精品中文字幕在线| 亚洲精品v欧美精品v日韩精品| 69影院欧美专区视频| 亚洲的天堂在线中文字幕| 亚洲天堂日韩电影| 日本欧美黄网站| 欧美视频13p| 91av在线看| 日韩精品免费电影| 欧美华人在线视频| 国产精品一区二区电影| 久久成人精品一区二区三区| 亚洲a一级视频| 国产精品久久久久久久久粉嫩av| 欧美午夜精品久久久久久人妖| 亚洲free嫩bbb| 久久99精品久久久久久噜噜| 按摩亚洲人久久| 国产成人a亚洲精品| 亚洲精品资源美女情侣酒店| 成人性生交大片免费看视频直播| 日本一区二区在线播放| 欧美电影在线免费观看网站| 久久成人综合视频| 国产精品亚洲欧美导航| 97av在线视频免费播放| 81精品国产乱码久久久久久| 欧美野外wwwxxx| 欧美激情欧美激情在线五月| 久久久精品视频成人| 久久久这里只有精品视频| 国产精品永久免费在线| 久久精品成人欧美大片| 大伊人狠狠躁夜夜躁av一区| 亚洲黄色av网站| 精品电影在线观看| 亚洲综合一区二区不卡| 欧美大片大片在线播放| 日韩一区二区福利| 亚洲欧洲国产一区| 色综合天天狠天天透天天伊人| 久久久久久久999| 日韩亚洲在线观看| 一区二区三区国产视频| 国产在线一区二区三区| 亚洲欧美精品一区| 国产精品美女午夜av| 国产精品成人一区二区三区吃奶| 亚洲欧美国产精品久久久久久久| 成人信息集中地欧美| 久久久99免费视频| 日韩va亚洲va欧洲va国产| 日本欧美在线视频| 精品亚洲国产成av人片传媒| 亚洲视频电影图片偷拍一区| 欧美激情第1页| 91精品国产综合久久香蕉的用户体验| 狠狠综合久久av一区二区小说| 国产欧美日韩中文字幕| 久久久久久久999| 在线观看精品国产视频| 7777精品久久久久久| 在线观看国产精品日韩av| 亚洲va码欧洲m码| 国产精品九九久久久久久久| 欧美成人激情视频| 精品视频久久久久久| 日韩精品亚洲元码| 亚洲小视频在线观看| 亚洲欧美精品一区| 91精品视频播放| 中文字幕av一区| 一区二区欧美久久| 久久精彩免费视频| 欧美日韩在线免费| 97精品国产aⅴ7777| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲国产女人aaa毛片在线| 欧美孕妇孕交黑巨大网站| 亚洲电影免费观看高清完整版在线观看| 精品国产一区二区三区四区在线观看| 久久国产精品电影| 81精品国产乱码久久久久久| 国产香蕉97碰碰久久人人| 久久人人看视频| 欧美极品在线视频| 91地址最新发布| 亚洲欧美日韩区| 欧美精品成人91久久久久久久| 欧美黄色三级网站| 亚洲香蕉伊综合在人在线视看| 神马国产精品影院av| 国产精品一区二区三区久久久| 国产a∨精品一区二区三区不卡| 国产精品一区二区三区久久久| 91chinesevideo永久地址| 久久久久久噜噜噜久久久精品| 成人国产精品av| 欧美亚洲国产视频| 亚洲女成人图区| 美女啪啪无遮挡免费久久网站| 97久久超碰福利国产精品…| 欧美黑人xxxx| 日韩视频永久免费观看| 亚洲影视九九影院在线观看| 亚洲国产97在线精品一区| 欧美巨猛xxxx猛交黑人97人| 国产精品综合不卡av| 97精品国产97久久久久久春色| 96精品视频在线| 亚洲一二在线观看| 日韩hd视频在线观看| 国产丝袜高跟一区| 欧美成人亚洲成人日韩成人| 欧美日韩国产在线| 欧美亚洲国产视频小说| 欧美日韩在线第一页| 国产91热爆ts人妖在线| 国产精品一区二区三区久久| 国产成人亚洲综合91| 亚洲欧美中文日韩在线v日本| 欧美成人合集magnet| 亚洲福利小视频| 久久中文久久字幕| 色综合久久悠悠| 日韩欧美在线看| 日韩**中文字幕毛片| 亚洲成人av在线| 欧美一区二区三区……| 国产一区二区三区中文| 97在线视频观看| 一区二区三区回区在观看免费视频| 久久久国产精品一区| 欧美日韩在线看| 久久综合伊人77777| 欧美综合一区第一页| 欧美中文字幕第一页| 久久在线精品视频| 国内外成人免费激情在线视频网站| 8090理伦午夜在线电影| 国产精品久久久久久av福利| 亚洲综合精品伊人久久| 日韩精品在线观| 日韩视频免费在线观看| 亚洲欧美综合精品久久成人| 国产精品久在线观看| 欧美成人网在线| 国产一区在线播放| 欧美日韩一区免费| 精品香蕉在线观看视频一| 欧美午夜视频一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文字幕亚洲专区| 亚洲综合最新在线| 亚洲精品中文字幕有码专区| 久久在精品线影院精品国产| 国产小视频国产精品| 久久久免费电影| 日本精品中文字幕| 亚洲欧洲在线播放| 国产精品久久久av久久久| 日本精品在线视频| 日韩三级影视基地|