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

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

小議在Oracle中索引的使用

瀏覽:53日期:2023-11-19 18:59:21
索引是由Oracle維護的可選結構,為數據提供快速的訪問。準確地判定在什么地方需要使用索引是困難的,使用索引有利于調節檢索速度。 當建立一個索引時,必須指定用于跟蹤的表名以及一個或多個表列。一旦建立了索引,在用戶表中建立、更改和刪除數據庫時, Oracle就自動地維護索引。創建索引時,下列準則將幫助用戶做出決定:1) 索引應該在SQL語句的'where'或'and'部分涉及的表列(也稱謂詞)被建立。假如personnel表的'firstname'表列作為查詢結果顯示,而不是作為謂詞部分,則不論其值是什么,該表列不會被索引。2)用戶應該索引具有一定范圍的表列,索引時有一個大致的原則:假如表中列的值占該表中行的2 0 %以內,這個表列就可以作為候選索引表列。假設一個表有36 000行且表中一個表列的值平均分布(大約每12000行),那么該表列不適合于一個索引。然而,假如同一個表中的其他表列中列值的行在1 0 0 0~1 5 0 0之間(占3 %~4 % ),則該表列可用作索引。3)假如在S Q L語句謂詞中多個表列被一起連續引用,則應該考慮將這些表列一起放在一個索引內, O r a c l e將維護單個表列的索引(建立在單一表列上)或復合索引(建立在多個表列上)。復合索引稱并置索引。  1 主要害字的約束關系數據庫理論指出,在表中能唯一標識表的每個數據行的一個或多個表列是對象的主要害字。由于數據字典中定義的主要害字能確保表中數據行之間的唯一性,因此,在O r a c l e 8 i數據庫中建立表索引要害字有助于應用調節。另外,這也減輕了開發者為了實現唯一性檢查,而需要各自編程的要求。提示使用主要害字索引條目比不使用主要害字索引檢索得快。假設表p e r s o n把它的i d表列作為主要害字,用下列代碼設置約束:alter table person add constraint person_pk primary key (id) using index storage (initial 1m next 1m pctincrease 0) tablespace prd_indexes ;處理下列S Q L語句時:select last_name ,first_name ,salary from person where id = 289 ;在查找一個已確定的“ i d”表列值時, O r a c l e將直接找到p e r s o n _ p k。假如其未找到正確的索引條目,O r a c l e知道該行不存在。主要害字索引具有下列兩個獨特之處:1.1因為索引是唯一的, 所以O r a c l e知道只有一個條目具有設定值。假如查找到了所期望的條目,則立即終止查找。1.2一旦碰到一個大于設定值的條目,索引的順序搜索可被終止;2 ORDER BY中用索引ORDER BY 子句只在兩種嚴格的條件下使用索引. ORDER BY中所有的列必須包含在相同的索引中并保持在索引中的排列順序. ORDER BY中所有的列必須定義為非空. WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. 例如: 表DEPT包含以下列: DEPT_CODE PKNOT NULL DEPT_DESC NOT NULL DEPT_TYPE NULL 非唯一性的索引(DEPT_TYPE) 低效: (索引不被使用) SELECT DEPT_CODE FROM DEPT ORDER BY DEPT_TYPE EXPLAIN PLAN: SORT ORDER BY TABLE Access FULL 高效: (使用索引) SELECT DEPT_CODE FROM DEPT WHERE DEPT_TYPE > 0 EXPLAIN PLAN: TABLE ACCESS BY ROWID ON EMP INDEX RANGE SCAN ON DEPT_IDX 3 避免改變索引列的類型. 當比較不同數據類型的數據時, ORACLE自動對列進行簡單的類型轉換. 假設 EMPNO是一個數值類型的索引列. SELECT … FROM EMP WHERE EMPNO = ‘123' 實際上,經過ORACLE類型轉換, 語句轉化為: SELECT … FROM EMP WHERE EMPNO = TO_NUMBER(‘123') 幸運的是,類型轉換沒有發生在索引列上,索引的用途沒有被改變. 現在,假設EMP_TYPE是一個字符類型的索引列. SELECT … FROM EMP WHERE EMP_TYPE = 123 這個語句被ORACLE轉換為: SELECT … FROM EMP WHERE TO_NUMBER(EMP_TYPE)=123 因為內部發生的類型轉換, 這個索引將不會被用到! 為了避免ORACLE對你的SQL進行隱式的類型轉換, 最好把類型轉換用顯式表現出來. 注重當字符和數值比較時, ORACLE會優先轉換數值類型到字符類型. 4 需要當心的WHERE子句 某些SELECT 語句中的WHERE子句不使用索引. 這里有一些例子. 在下面的例子里, ‘!=' 將不使用索引. 記住, 索引只能告訴你什么存在于表中, 而不能告訴你什么不存在于表中. 不使用索引: SELECT ACCOUNT_NAME FROM TRANSACTION WHERE AMOUNT !=0; 使用索引: SELECT ACCOUNT_NAME FROM TRANSACTION WHERE AMOUNT >0; 下面的例子中, ‘'是字符連接函數. 就象其他函數那樣, 停用了索引. 不使用索引: SELECT ACCOUNT_NAME,AMOUNT FROM TRANSACTION WHERE ACCOUNT_NAMEACCOUNT_TYPE='AMEXA'; 使用索引: SELECT ACCOUNT_NAME,AMOUNT FROM TRANSACTION WHERE ACCOUNT_NAME = ‘AMEX' AND ACCOUNT_TYPE=' A'; 下面的例子中, ‘+'是數學函數. 就象其他數學函數那樣, 停用了索引. 不使用索引: SELECT ACCOUNT_NAME, AMOUNT FROM TRANSACTION WHERE AMOUNT + 3000 >5000; 使用索引: SELECT ACCOUNT_NAME, AMOUNT FROM TRANSACTION WHERE AMOUNT > 2000 ; 下面的例子中,相同的索引列不能互相比較,這將會啟用全表掃描. 不使用索引: SELECT ACCOUNT_NAME, AMOUNT FROM TRANSACTION WHERE ACCOUNT_NAME = NVL(:ACC_NAME,ACCOUNT_NAME); 使用索引: SELECT ACCOUNT_NAME, AMOUNT FROM TRANSACTION WHERE ACCOUNT_NAME LIKE NVL(:ACC_NAME,'%'); 假如一定要對使用函數的列啟用索引, ORACLE新的功能: 基于函數的索引(Function-Based Index) 也許是一個較好的方案. CREATE INDEX EMP_I ON EMP (UPPER(ename)); /*建立基于函數的索引*/ SELECT * FROM emp WHERE UPPER(ename) = ‘BLACKSNAIL'; /*將使用索引*/ 5 怎樣監控無用的索引Oracle 9i以上,可以監控索引的使用情況,假如一段時間內沒有使用的索引,一般就是無用的索引語法為:開始監控:alter index index_name monitoring usage;檢查使用狀態:select * from v$object_usage;停止監控:alter index index_name nomonitoring usage;當然,假如想監控整個用戶下的索引,可以采用如下的腳本:set heading offset echo offset feedback offset pages 10000spool start_index_monitor.sqlSELECT 'alter index 'owner'.'index_name' monitoring usage;'FROM dba_indexesWHERE owner = USER; spool off set heading onset echo onset feedback on------------------------------------------------set heading offset echo offset feedback offset pages 10000spool stop_index_monitor.sqlSELECT 'alter index 'owner'.'index_name' nomonitoring usage;'FROM dba_indexesWHERE owner = USER; spool off set heading onset echo onset feedback on
標簽: Oracle 數據庫
主站蜘蛛池模板: 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 振动传感器,检波器-威海广达勘探仪器有限公司 | 净化工程_无尘车间_无尘车间装修-广州科凌净化工程有限公司 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 体坛网_体坛+_体坛周报新闻客户端 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 真空冷冻干燥机_国产冻干机_冷冻干燥机_北京四环冻干 | 间甲酚,间甲酚厂家-山东祥东新材料 | 周口市风机厂,周鼓风机,河南省周口市风机厂| 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | 锂电叉车,电动叉车_厂家-山东博峻智能科技有限公司 | 小型单室真空包装机,食品单室真空包装机-百科 | 博客-悦享汽车品质生活 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 金现代信息产业股份有限公司--数字化解决方案供应商 | 智慧水务|智慧供排水利信息化|水厂软硬件系统-上海敢创 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 福建成考网-福建成人高考网 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 |