好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > 在OracleE數(shù)據(jù)庫(kù)的字段上建立索引的方法

在OracleE數(shù)據(jù)庫(kù)的字段上建立索引的方法

熱門(mén)標(biāo)簽:地圖標(biāo)注原件 南通防封外呼系統(tǒng)運(yùn)營(yíng)商 百變地圖標(biāo)注 廣州市400電話辦理 淮安自動(dòng)外呼系統(tǒng)開(kāi)發(fā) 宜賓外呼系統(tǒng)廠家 修改高德地圖標(biāo)注 語(yǔ)音電話機(jī)器人營(yíng)銷(xiāo)方案 語(yǔ)音電話機(jī)器人缺點(diǎn)
當(dāng)where子句對(duì)某一列使用函數(shù)時(shí),除非利用這個(gè)簡(jiǎn)單的技術(shù)強(qiáng)制索引,否則Oracle優(yōu)化器不能在查詢(xún)中使用索引。 通常情況下,如果在WHERE子句中不使用諸如UPPER、REPLACE 或SUBSTRD等函數(shù),就不能對(duì)指定列建立特定的條件。但如果使用了這些函數(shù),則會(huì)出現(xiàn)一個(gè)問(wèn)題:這些函數(shù)會(huì)阻礙Oracle優(yōu)化器對(duì)列使用索引,因而與采用索引的情況相比較,查詢(xún)會(huì)花費(fèi)更多的時(shí)間。 慶幸的是,如果在使用函數(shù)的這些列中包含了字符型數(shù)據(jù),可以用這樣一種方法修改查詢(xún)語(yǔ)句,以達(dá)到強(qiáng)制性使用索引,更有效地運(yùn)行查詢(xún)。這篇文章介紹了涉及的技術(shù),并說(shuō)明了在兩種典型情況下怎樣實(shí)現(xiàn)。 大小寫(xiě)混合情況 在討論由于函數(shù)修改了列的內(nèi)容,如何強(qiáng)制使用索引前,讓我們首先看看為什么Oracle優(yōu)化器在這種情況下不能使用索引。假定我們要搜尋包含了大小寫(xiě)混合的數(shù)據(jù),如在表1中ADDRESS表的NAME列。因?yàn)閿?shù)據(jù)是用戶輸入的,我們無(wú)法使用已經(jīng)統(tǒng)一改為大寫(xiě)的數(shù)據(jù)。為了找到每一個(gè)名為john的地址,我們使用包含了UPPER子句的查詢(xún)語(yǔ)句。如下所示:
SQL> select address from address where upper(name) like 'JOHN';
在運(yùn)行這個(gè)查詢(xún)語(yǔ)句前,如果我們運(yùn)行了命令"set autotrace on", 將會(huì)得到下列結(jié)果,其中包含了執(zhí)行過(guò)程:
ADDRESS    cleveland    1 row selected.    Execution Plan    SELECT STATEMENT    TABLE ACCESS FULL ADDRESS
可以看到,在這種情況下,Oracle優(yōu)化器對(duì)ADDRESS 表作了一次完整的掃描,而沒(méi)有使用NAME 列的索引。這是因?yàn)樗饕歉鶕?jù)列中數(shù)據(jù)的實(shí)際值建立的,而UPPER 函數(shù)已經(jīng)將字符轉(zhuǎn)換成大寫(xiě),即修改了這些值,因此該查詢(xún)不能使用這列的索引。優(yōu)化器不能與索引項(xiàng)比較"JOHN",沒(méi)有索引項(xiàng)對(duì)應(yīng)于"JOHN"-只有"john" 。 值得慶幸的是,如果在這種情況下想要強(qiáng)制使用索引,有一種簡(jiǎn)便的方法:只要在WHERE 子句中增加一個(gè)或多個(gè)特定的條件,用于測(cè)試索引值,并減少需要掃描的行,但這并沒(méi)有修改原來(lái)SQL 編碼中的條件。以下列查詢(xún)語(yǔ)句為例:
SQL> select address from address where upper(name) like 'JO%' AND (name   like 'J%' or name like 'j%');
使用這種查詢(xún)語(yǔ)句(已設(shè)置AUTOTRACE),可得到下列結(jié)果:
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
現(xiàn)在,優(yōu)化器為WHERE 子句中AND 聯(lián)結(jié)的兩個(gè)語(yǔ)句中每一個(gè)語(yǔ)句確定的范圍進(jìn)行掃描----第二個(gè)語(yǔ)句沒(méi)有引用函數(shù),因而使用了索引。在兩個(gè)范圍掃描后,將運(yùn)行結(jié)果合并。 在這個(gè)例子中,如果數(shù)據(jù)庫(kù)有成百上千行,可以用下列方法擴(kuò)充WHERE 子句,進(jìn)一步縮小掃描范圍:
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' );
得到的結(jié)果與以前相同,但是,其執(zhí)行過(guò)程如下所示,表明有4個(gè)掃描范圍。
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
如果試圖進(jìn)一步提高查詢(xún)速度,我們可以在特定的"name like"條件中指明3個(gè)或更多的字符。然而,這樣做會(huì)使得WHERE子句十分笨重。因?yàn)樾枰笮?xiě)字符所有可能的組合-joh ,Joh,jOh,joH等等。除此之外,指定一個(gè)或兩個(gè)字符已足以加快查詢(xún)的運(yùn)行速度了。 現(xiàn)在讓我們看看,當(dāng)我們引用不同的函數(shù)時(shí),怎樣運(yùn)用這個(gè)基本技術(shù)。 使用REPLACE的情況 正如名字不總是以大寫(xiě)輸入一樣,電話號(hào)碼也會(huì)以許多格式出現(xiàn): 如 123-456-7890, 123 456 7890,(123)456-7890 等等。 如果在列名為 PHONE_NUMBER中搜尋上述號(hào)碼時(shí),可能需要使用函數(shù)REPLACE以保證統(tǒng)一的格式。如果在PHONE_NUMBER列中只包含空格、連字符和數(shù)字,where 子句可以如下所示:
WHERE replace(replace(phone_number , '-' ) , ' ' ) = '1234567890'
WHERE子句兩次使用REPLACE 函數(shù)去掉了連字符和空格,保證了電話號(hào)碼是簡(jiǎn)單的數(shù)字串。然而,該函數(shù)阻止了優(yōu)化器在該列使用索引。因此,我們按如下方法修改WHERE子句,以強(qiáng)制執(zhí)行索引。
WHERE replace(replace(phone_number, '-' ) , ' ' ) = '1234567890'
AND phone_number like '123% '如果我們知道數(shù)據(jù)中可能包含圓括號(hào),WHERE 子句會(huì)稍微復(fù)雜一點(diǎn)。我們可以再增加REPLACE 函數(shù)(去掉圓括號(hào)、連字符和空格),按如下所示擴(kuò)充增加的條件:
WHERE replace(replace(replace(replace(phone_number , ' - ' ) ,' '), '( ' )   , ' ) ' ) = '1234567890'   AND (phone number like ' 123% ' or phone_number like ' (123% ' ) '
該例強(qiáng)調(diào)了巧妙地選用WHERE 子句條件的重要性,而且,這些條件不會(huì)改變查詢(xún)結(jié)果。你的選擇應(yīng)基于完全了解該列中存在的信息類(lèi)型。在該例中,我們需要知道 PHONE_NUMBER 數(shù)據(jù)中存在幾種不同的格式,這樣,我們能夠修改WHERE 子句而不會(huì)影響查詢(xún)結(jié)果。 正確的條件 以后當(dāng)你遇到包含CHARACTER 數(shù)據(jù)修改函數(shù)列的WHERE 子句時(shí),應(yīng)考慮怎樣利用增加一個(gè)或兩個(gè)特定的條件,迫使優(yōu)化器使用索引。適當(dāng)?shù)剡x擇一組特定的條件能減少掃描行,并且強(qiáng)制使用索引不會(huì)影響查詢(xún)結(jié)果----但卻提高了查詢(xún)的執(zhí)行速度。
您可能感興趣的文章:
  • Oracle數(shù)據(jù)庫(kù)中建立索引的基本方法講解
  • oracle數(shù)據(jù)庫(kù)索引失效
  • Oracle 數(shù)據(jù)庫(kù)中創(chuàng)建合理的數(shù)據(jù)庫(kù)索引
  • Oracle數(shù)據(jù)庫(kù)索引的維護(hù)
  • oracle數(shù)據(jù)庫(kù)關(guān)于索引建立及使用的詳細(xì)介紹

標(biāo)簽:聊城 池州 襄陽(yáng) 股票投資 南平 南平 嘉峪關(guān) 通化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在OracleE數(shù)據(jù)庫(kù)的字段上建立索引的方法》,本文關(guān)鍵詞  在,OracleE,數(shù)據(jù)庫(kù),的,字段,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在OracleE數(shù)據(jù)庫(kù)的字段上建立索引的方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于在OracleE數(shù)據(jù)庫(kù)的字段上建立索引的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章

    上一篇:重新編譯PLSQL中的無(wú)效對(duì)象或者指定的對(duì)象 的方法

    下一篇:oracle下加密存儲(chǔ)過(guò)程的方法

    主站蜘蛛池模板: 日本无码色情aⅴ久久久无码免费 91美女精品??????App | 17c起草国产AV麻豆香蕉| 《前度》沙发那段| 91麻豆国产免费| 好爽?好紧?再深一点韩剧| a级黄色毛片三| 无码人妻欧美一区二区三区| 黄色一级片免费网站| 双性学生授乳荡奶头漫画| 又大又粗又硬 视频| 男男被粗大的??巴捣出白浆| 免费毛片在线播放免费| 午夜DJ在线观看高清在线| 欧美人妻免费看一区二区| 欧美乱人伦中文字幕在线不卡| 精品免费久久久久久影院| 欧美激情香艳视频| 日出白浆视频| 丈夫的情人| japanese白嫩人妻HD| 国产精品爆乳尤物99精品| 女人露给男人揉捏亲视频| 国精产品一区一区三区有限是什么 | 欧美黄色视屏| XXXXX日本学生护士老师| 操姨姐| 漂亮大学生韩国三级播放国产| ass女人扒开小泬pics| 婷婷丁香六月激情综合啪| 亚洲一区二区在线免费观看| 老公用力操| 公妇借种林娇h| 黄色激情视频小说| 看黄色网址| 好猛好紧好硬使劲好大国产| 日本老头变态xxxx| 美女搡BBB又爽又猛又黄www| 美女被爆羞羞网站在免费观看| 亚洲字幕波多野结衣作品| 女人把扒开给男人爽漫画| 久久黄色小视频|