电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何在Oracle數據庫的字段上建立索引

瀏覽:65日期:2023-11-11 19:19:02

當where子句對某一列使用函數時,除非利用這個簡單的技術強制索引,否則Oracle優化器不能在查詢中使用索引。 通常情況下,假如在WHERE子句中不使用諸如UPPER、REPLACE 或SUBSTRD等函數,就不能對指定列建立特定的條件。但假如使用了這些函數,則會出現一個問題:這些函數會阻礙Oracle優化器對列使用索引,因而與采用索引的情況相比較,查詢會花費更多的時間。 慶幸的是,假如在使用函數的這些列中包含了字符型數據,可以用這樣一種方法修改查詢語句,以達到強制性使用索引,更有效地運行查詢。這篇文章介紹了涉及的技術,并說明了在兩種典型情況下怎樣實現。 大小寫混合情況 在討論由于函數修改了列的內容,如何強制使用索引前,讓我們首先看看為什么Oracle優化器在這種情況下不能使用索引。假定我們要搜尋包含了大小寫混合的數據,如在表1中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 ADDRESSINDEX 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 數據庫
相關文章:
主站蜘蛛池模板: 牛奶检测仪-乳成分分析仪-北京海谊 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 智慧消防-消防物联网系统云平台| 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 地埋式垃圾站厂家【佳星环保】小区压缩垃圾中转站转运站 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 模切之家-专注服务模切行业的B2B平台! | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 正压送风机-多叶送风口-板式排烟口-德州志诺通风设备 | 鑫达滑石-辽宁鑫达滑石集团| 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 北京中创汇安科贸有限公司| 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 破碎机锤头_合金耐磨锤头_郑州宇耐机械工程技术有限公司 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 |