Oracle 10g11g索引创建使用问题分析(针对编程人员).ppt
《Oracle 10g11g索引创建使用问题分析(针对编程人员).ppt》由会员分享,可在线阅读,更多相关《Oracle 10g11g索引创建使用问题分析(针对编程人员).ppt(91页珍藏版)》请在三一办公上搜索。
1、Oracle 10g/11g索引创建-使用-问题分析(针对编程人员),赵元杰中程在线(北京)科技有限公司2009.8,2023年3月1日星期三,Oracle 数据库设计与性能,2/90,内容提要,编程与索引各类索引适应场合索引的访问方法SQL语句有关的索引调整索引参数与创建索引缓冲索引问题分析对开发者的建议附录:Oracle 索引指标参考资料,2023年3月1日星期三,Oracle 数据库设计与性能,3/90,编程与索引,关于索引是什么?在列上定义避免全表扫描索引如何工作或不工作在insert/update 与 select 之间交替使用主键自动变为索引,2023年3月1日星期三,Oracle
2、 数据库设计与性能,4/90,应用系统设计人员:按照业务要求建立主键,可形成索引;可建立唯一索引。程序编码人员:按照业务查询特点创建各类索引;只要有CREATE INDEX权限即可;在编写查询程序时,要知道所访问表中哪些列已经创建了哪些索引;在编程中运用这些索引才能达到优化的目的。,编程与索引,2023年3月1日星期三,Oracle 数据库设计与性能,5/90,应用系统设计人员:在查询表数据前,要了解锁访问的表有哪些索引;每个索引的列的顺序;在Where 条件中使用索引。索引信息的获得:访问表的索引信息可从数据字典查询;可通过图形界面查看索引的列名词;可通过DBMS_METADATA.GET_
3、DDL导出索引的创建信息。,编程与索引-索引信息,2023年3月1日星期三,Oracle 数据库设计与性能,6/90,从SQL Developer 浏览索引信息:启动SQL Developer,连接到某个用户;选择“Index”了列出索引信息,编程与索引-索引信息,索引列,表名,2023年3月1日星期三,Oracle 数据库设计与性能,7/90,索引有多少?可查询:DBA_CONSTRAINTS 限制性的信息;DBA_INDEXES 表的主键,外部键及创建的索引的信息;DBA_CONS_COLUMNS 表中限制的列信息;DBA_IND_COLUMNS 表中的索引列信息。,DBA_CONSTRA
4、INTS描述约束的信息,包括PRIMARY KET、FOREIGN KEY、UNIQUE KEY、NOT NULL及CHECK。列CONSTRAINT_TYPE的含义如下:C(表中的CHECK约束)P(主键)U(惟一键)R(引用完整性,外键)V(视图中的Check检查)O(视图中的只读=Read only),编程与索引-信息查询,2023年3月1日星期三,Oracle 数据库设计与性能,8/90,查询索引列有关的数据字典:USER_IND_COLUMNS-索引列的次序COLUMN_POSITION;,SQL select table_name,index_name,COLUMN_POSITIO
5、N 2 from user_ind_columns 3*where table_name=EMP;TABLE_NAME INDEX_NAME COLUMN_POSITION-EMP PK_EMP 1,编程与索引-信息查询,2023年3月1日星期三,Oracle 数据库设计与性能,9/90,索引信息查询的必要性:程序开发人员了解访问表的索引列信息,才能在WHERE 条件句使用它。,SQL-查询表所包含的索引名称:SQLselect index_name,table_name from USER_INDEXES WHERE table_name=xxxxx;SQL-使用DBMS_METADATA.
6、GET_DDL包获得索引信息:SQLSELECT(INDEX,index_name)from DUAL;,编程与索引-信息查询,2023年3月1日星期三,Oracle 数据库设计与性能,10/90,内容提要,编程与索引各类索引适应场合索引的访问方法SQL语句有关的索引调整索引参数与创建索引缓冲索引问题分析对开发者的建议参考资料,2023年3月1日星期三,Oracle 数据库设计与性能,11/90,Oracle的各种索引,Oracle可创建下面索引:B-tree索引默认的通用索引B-tree cluster索引为 cluster创建的索引*逆键索引-索引列有规律产生的情景Hash索引-为 has
7、h cluster创建的索引*Bitmap索引-索引列的值变化可枚举的情景IOT表(索引结构表)-独立的以主键查询的表的情景,2023年3月1日星期三,Oracle 数据库设计与性能,12/90,1.B*tree 索引-,B*tree 存储示义图:,ADAMS,BIRD,BINDER,CHEN,DUNNE,EARL,FIGEROA,GEORGE,HANLY,JONES,KING,LEGRAND,LOKER,MITCHELL,SANCHEZ,YAMADA,Root Block:,H,=H,D,=D,LO,=LO,BranchBlocks:,Leaf:,员工名字:ADAMS,BIRD,BINDER
8、,CHEN,DUNNE,EARL,FIGEROA,GEORGE,HANLY,JONES.,2023年3月1日星期三,Oracle 数据库设计与性能,13/90,1.B*tree 索引-,B*tree 存储与使用示义图:,2023年3月1日星期三,Oracle 数据库设计与性能,14/90,1.B*tree-索引的块叶,每个索引块至少包含一个叶块每个叶块包含0个或多个数据行每个数据行一个键值与数据索引可以是唯一的或非唯一唯一的和非唯一索引的叶行格式不同,2023年3月1日星期三,Oracle 数据库设计与性能,15/90,1.B*tree-叶块内部结构,20 bytes,72 bytes,16
9、bytes,16 bytes,2 bytes per row,4 bytes,Block Common Header,Transaction Header,Index Header,Index Leaf Header,Index Leaf Rows,Tail,Free Space,Slot Array,Block Size,2 bytes,2023年3月1日星期三,Oracle 数据库设计与性能,16/90,1.B*tree-块的分枝,索引可以包含分枝块分枝块指向其它的分枝块或叶块分枝块包含 0 行或多个行每个行有一个后缀键和指针指向下一个块压缩行以 0 xFE 字节结束,2023年3月1日星
10、期三,Oracle 数据库设计与性能,17/90,1.B*tree-分枝块结构,20 bytes,Block Common Header,Transaction Header,Index Header,Index Branch Header,Index Branch Rows,Tail,Free Space,Slot Array,48 bytes,16 bytes,24 bytes,2 bytes per row,4 bytes,Block Size,2 bytes,2023年3月1日星期三,Oracle 数据库设计与性能,18/90,1.B*Tree-分枝块,每个块有一个指针指向树的后面.这
11、是头的部分一个分枝快包含 N 行指向 N+1 块.,Branch Blocks,Root Block,Leaf Blocks,Level 0,Level 1,Level 2,2023年3月1日星期三,Oracle 数据库设计与性能,19/90,1.B*Treee-创建,创建B*Tree索引:CREATE INDEX emp_ename ON emp(ename)TABLESPACE users STORAGE(INITIAL 5M NEXT 2m PCTINCREASE 0)PCTFREE 0;创建唯一索引:CREATE UNIQUE INDEXdept_unique_index ON dep
12、t(dname)TABLESPACE indx;,2023年3月1日星期三,Oracle 数据库设计与性能,20/90,1.B*tree-主键(=唯一索引),语法CREATE UNIQUE INDEX dept_name_unq ON department(name);建议加表空间等描述,ALTER TABLE departmentADD CONSTRAINT pk_dept_idPRIMARY KEY(dept_id);,2023年3月1日星期三,Oracle 数据库设计与性能,21/90,1.B*Tree主键与唯一索引,主键要求如果是一个列的话,该列不能为NULL如果多个列构成主键,至少有
13、一个列是非空 唯一索引可以空,但有值必须唯一:,2023年3月1日星期三,Oracle 数据库设计与性能,22/90,1.B*Tree-NOSORT,如果创建索引时,表的列的值是有规律按照由小到大排列,则创建索引时不需要对列的值进行排序,可用 NOSORT子句描述,如:,CREATE INDEX index1 ON table1(column1)NOSORT,如果列没有按照由小到大排列,则返回错误:,ORA-01409:NOSORT option may not be used;rows are not in ascending order,2023年3月1日星期三,Oracle 数据库设计与
14、性能,23/90,1.B*tree主键与唯一索引,练习1:创建表后加主键与索引:可加表空间存储描述等;,CREATE TABLE dept(dept_id VARCHAR2(5),dept_name VARCHAR2(30)TABLESPACE USERS;Add a PRIMARY KEY constraintAdd a UNIQUE constraint-SELECT constraint_name FROM user_constraints;SELECT index_name,table_name FROM user_indexes;-DROP INDEX(index name);,20
15、23年3月1日星期三,Oracle 数据库设计与性能,24/90,1.B*Tree-唯一索引例子,CREATE UNIQUE INDEX test_rsidxON test(b)REVERSEPCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;索引已创建。,练习2:创建唯一索引,如:,2023年3月1日星期三,Oracle 数据库设计与性能,25/90,2.Bitmap索引概念,row1234,NameJoeJaneJohnJames,M_StatusSingleMarriedD
16、ivorcedMarried,StatePACACAPA,GenderMFMM,M_Status-IDX,SingleMarriedDivorced,State-IDX,CAPA,Gender-IDX,MF,1 0 0 00 1 0 00 0 1 0,0 1 1 01 0 0 1,1 0 1 10 1 0 0,Select count(*)from customerswhere M_Status=married ANDState=CA AND Gender=M,2023年3月1日星期三,Oracle 数据库设计与性能,26/90,2.Bitmap适合的情况,Bitmap索引特点:当表很大(如数
17、百万行),且关键字列的基数低(如性别列)时,即该列有非常少的独特值例当查询经常使用涉及OR 运算符的多个WHERE 条件组合时当关键字列上存在只读或很少的更新操作时;Bitmap索引空间:比一般的索引占用更大空间;可专门分析存储再设置存储参数;见另外资料;,2023年3月1日星期三,Oracle 数据库设计与性能,27/90,2.Bitmap索引创建,CREATE BITMAP INDEX schema.indexON schema.table(column ASC|DESC,column ASC|DESC.)TABLESPACE tablespace PCTFREE integer INIT
18、RANS integer MAXTRANS integer storage-clause LOGGING|NOLOGGING NOSORT 注意,Bitmap 不能是 unique 的索引,创建BITMAP索引语句的语法加bitmap 关键字即可:,2023年3月1日星期三,Oracle 数据库设计与性能,28/90,2.Bitmap索引的例子,SQL CREATE BITMAP INDEX test_bm_idx 2 ON test(c)3 PCTFREE 30 4 STORAGE(INITIAL 200K NEXT 200K 5 PCTINCREASE 0 MAXEXTENTS 50)6
19、TABLESPACE indx;索引已创建。SQL,创建BITMAP索引例子建议注意存储初始分配:,2023年3月1日星期三,Oracle 数据库设计与性能,29/90,2.Bitmap索引例子-电影级别,#1#2#3#4#5.,*,*,*,*,1,2,4,3,5,Rowid,rating,Star Wars I,2000.Exorcist,1975,.Castaway,2000Ghostbusters,1983Harry Potter,2001.,Table Data,将电影分级:Star Wars-星球大战 5级;Ghostbusters 幽灵为2级;,2023年3月1日星期三,Oracl
20、e 数据库设计与性能,30/90,2.Bitmap索引,位图占空间特点:每个Bit 只包含一个位;如果有 10万部电影,则:,100,000 movies*5 ratings/movie=500,000 possible ratings(bits)or(approx.)50K bytes-CREATE BITMAP INDEX movie$bitmap_rating_idx ON movie(rating);,2023年3月1日星期三,Oracle 数据库设计与性能,31/90,2.Bitmap与B*Tree索引,B*Tree索引:适合高基数的列更新关键字列的费用相对较低使用OR 谓词的查询效
21、率低对OLTP 有用Bitmap索引:适合低基数的列更新关键字列的费用非常昂贵使用OR 谓词的查询效率高对数据仓库有用,2023年3月1日星期三,Oracle 数据库设计与性能,32/90,3.函数索引,函数索引概念:基于函数的索引就是存储预先计算好的函数或表达式值的索引;这些表达式可以是算术运算表达式、SQL或PL/SQL函数、C调用等;创建函数索引主要是依据Where子句来确定,比如:SELECT*FROM T1 WHERE col_a+col_b 10;CREATE INDEX idx ON T1(col_a+col_b);,2023年3月1日星期三,Oracle 数据库设计与性能,33
22、/90,3.函数索引,创建函数索引要求:创建函数索引,要设置下面的参数:QUERY_REWRITE_INTEGRITY=TRUSTEDQUERY_REWRITE_ENABLED=TRUECOMPATIBLE=8.1.0.0.0 及以上版本要具有GLOBAL QUERY REWRITE和CREATE ANY INDEX权限。,2023年3月1日星期三,Oracle 数据库设计与性能,34/90,3.函数索引-例子,一般的权限还不能创建函数索引:创建函数索引,-没有授权就创建函数索引的提示:SQL create index sal_comm on emp(sal+comm)*12,sal,comm
23、)2 tablespace users storage(initial 64k next 64k pctincrease 0);create index sal_comm on emp(sal+comm)*12,sal,comm)*ERROR at line 1:ORA-01031:insufficient privilegesSQL connect sys/sysora816Connected.SQL grant GLOBAL QUERY REWRITE,CREATE ANY INDEX to scott;Grant succeeded.-在连接到scott帐户,创建基于函数的索引:SQL
24、connect scott/tigerora816Connected.SQL create index sal_comm on emp(sal+comm)*12,sal,comm)2 tablespace users storage(initial 64k next 64k pctincrease 0);Index created.,2023年3月1日星期三,Oracle 数据库设计与性能,35/90,4.逆键索引,逆键索引概念:逆键索引也是B*Tree索引的一种,它通过反向键保持索引的所有叶子键上的插入分布;可用逆键索引来避免不平衡的索引。对于逆键索引可以进行下面操作:逆键索引使用:通过在A
25、LTER INDEX命令后加REBUILD NOREVERSE或REBUILD REVERSE子句来使索引边为反向键索引或普通索引;采用范围扫描的查询不能使用反向键索引;位图索引不能反向;索引编排表不能反向。,2023年3月1日星期三,Oracle 数据库设计与性能,36/90,KEY ROWIDEMPNO(BLOCK#ROW#FILE#)-1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.00018967 0000000F.0005.00019637 0000000F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 10g11g索引创建使用问题分析针对编程人员 10 g11g 索引 创建 使用 问题 分析 针对 编程 人员
链接地址:https://www.31ppt.com/p-2880448.html