orace数据库索引有哪些,oracle的索引类型到底有几种从原理上来划分
来源:整理 编辑:黑码技术 2024-11-17 03:25:53
1,oracle的索引类型到底有几种从原理上来划分
普通(B-TREE)、BITMAP功能Application Domain IndexesinterMedia Text Indexes
2,什么是Oracle的函数索引
索引是建立在函数基础之上的。比说。一般的索引 create index P_IDX ON TABLE1(COLUMN1);当执行SELECT * FROM TABLE1 WHERE COLUMN1 = XXX 时会用到索引。函数索引:CREATE INDEX P_IDX ON TABLE1(SUBSTR(COLUMN1,0,5));当执行SELECT * FROM TABLE1 WHERE SUBSTR(COLUMN1,0,5) = XXX 时会用到索引。但执行SELECT * FROM TABLE1 WHERE COLUMN1 = XXX时是不会用到索引的一般情况下是最好不用建函数索引。
3,Oracle数据库中的最常用的索引有哪些
按照索引数据的存储方式可以将索引分为:B树索引、位图索引、反向键索引和基于函数的索引按照索引列的唯一性可以分为:唯一索引和非唯一索引按照索引列的个数可以分为:单列索引 和复合索引1. b-tree索引Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。2. 位图索引(bitmap index)位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况。3. 基于函数的索引比如经常对某个字段做查询的时候是带函数操作的,那么此时建一个函数索引就有价值了。grant create session to myrole;grant create table to myrole;grant create view to myrole;grant create sequence to myrole;grant create any index to myrole;
4,oracle数据库索引种类分别什么情况下使用
1. b-tree索引Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。2. 位图索引(bitmap index)位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况。3. 基于函数的索引比如经常对某个字段做查询的时候是带函数操作的,那么此时建一个函数索引就有价值了。4. 分区索引和全局索引这2个是用于分区表的时候。前者是分区内索引,后者是全表索引5. 反向索引(REVERSE)这个索引不常见,但是特定情况特别有效,比如一个varchar(5)位字段(员工编号)含值(10001,10002,10033,10005,10016..)这种情况默认索引分布过于密集,不能利用好服务器的并行但是反向之后10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。6.HASH索引HASH索引可能是访问数据库中数据的最快方法,但它也有自身的缺点。集群键上不同值的数目必须在创建HASH集群之前就要知道。需要在创建HASH集群的时候指定这个值。使用HASH索引必须要使用HASH集群。Oracle数据库常见的索引种类有:B树索引、位图索引、反向键索引、基于函数的索引、B树索引:如果表包含的数据非常多,并且经常在WHERE子句中引用某列或某几列,则应该基于该列或这几个列建立B树索引;位图索引:当列的基数很低的时,当一个列的基数小于1%时,适用于位图索引;反向索引:如果用户使用序列在表中输入记录,则反向键索引首先指向每个列键值的字节,然后在反向后的新数据上进行索引;但进行反向键索引时却是非递增的,这意味如果将其添加到子叶节点,可能会在任意的子叶节点中进行。基于函数的索引:当数据库中遇到对字符大小写很敏感,如果用户不能确定输入数据的格式,甚至会产生一个严重的错误;这时候创建基于函数的索引就比较合适了;问题太多了吧?逻辑上:Single column 单列索引Concatenated 多列索引Unique 唯一索引NonUnique 非唯一索引Function-based函数索引Domain 域索引物理上:Partitioned 分区索引NonPartitioned 非分区索引B-tree:Normal 正常型B树Rever Key 反转型B树 Bitmap 位图索引create index name on:就是普通的 非唯一索引 或 函数索引 主键会给分配索引,外键不会自动分配索引,需要自己创建游标 数据库指针类似于字处理程序中的指针当你按下方向键时游标依次从各行文本中 滚动按一下向上键游标向上跳一行而按pageup 和pagedown 则会向一次翻阅几行数 据库游标的操作也类似 数据库游标允许你选择一组数据通过翻阅这组数据记录通常被称为数据集检查 每一个游标所在的特定的行你可以将游标和局部变量组合在一起对每一个记录进行检查 当游标移动到下一个记录时来执行一些外部操作 游标的另一个常见的用法是保存查询结果以备以后使用一个游标结果集是通过执行 select 查询来建立的如果你的应用程序或过程需要重复使用一组记录那么第一次建 立游标以后再重复使用将会比多次执行查询快得多而且你还有在查询的结果集中翻阅的好处1。需要顺序的逐条处理记录数据; 2。记录数不应该很多。
5,Oralce数据库中如何选择合适的索引类型
凭借字典的目录,我们可以非常迅速的找到我们所需要的条目。数据库也是如此。凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表。 虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用。这就好像即使字典没有目录的话,用户仍然可以使用它一样。可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典。数据库也是如此。若没有建立相关索引的话,则数据库在查询记录的时候,不得不去查询整个表。当表中的记录比较多的时候,其查询效率就会很低。所以,合适的索引,是提高数据库运行效率的一个很好的工具。 不过,并不是说表上的索引越多越好。过之而不及。故在数据库设计过程中,还是需要为表选择一些合适的索引。宁缺勿烂,这是建立索引时的一个具体选择。在理论上,虽然一个表可以设置无限的索引。但是,数据库管理员需要知道,表中的索引越多,维护索引所需要的开销也就越大。每当数据表中记录有增加、删除、更新变化的时候,数据库系统都需要对所有索引进行更新。故数据库表中的索引绝对不是多多益善。具体来说,在索引建立上,笔者对大家有如下建议。 建议一:在基数小的字段上要善于使用位图索引。 基数是位图索引中的一个基本的定义,它是指数据库表中某个字段内容中不重复的数值。如在员工信息表中的性别字段,一般就只有男跟女两个值,所以,其基数为2;婚姻状况字段的话,则其只有已婚、未婚、离婚三种状态,其基数就为3;民族一览内也是只有有限的几个值。 对于要查询基数小的字段,如现在用户想查找所有婚姻状况为“已婚”的“女性”时,利用位图索引可以提高查询的效率。这主要是因为标准索引是通过在索引中保存排序过的索引列以及对应的ROWID来实现的。若我们在基数小的列上建立标准索引的话,则其会返回大量的记录。 而当我们在创建位图索引的时候,在Oracle会对整个表进行扫描,并且会为索引列的每个取值建立一个位图。若内容相同,则在位图上会以一个相同的数字表示。此时,若这个字段的基数比较小的话,则若需要实现对整个字段的查询的话,效率就会非常的高。因为此时,数据库只要位图中数字相同的内容找出来即可。 除了在数据表某列基数比较小的情况下,采用位图索引外,我们往往在一些特殊的情况下,也会建议采用位图索引。最常见的情况是,在Where限制条件中,若我们多次采用AND或者OR条件时,也建议采用位图索引。因为当一个查询饮用了一些部署了位图索引的列的时候,这些位图可以很方便的与AND或者Or 运算符操作结合以快速的找出用户所需要的记录。 但是,这里要注意,不是在条件语句中包含运算符的时候,采用位图索引都能够提供比较高的效率。一般来说,只有AND 或者OR运算符的时候,位图索引才会比较具有优势。若此时用户采用大于号或者不等于号作为条件语句中的限制条件的时候,则往往采用标准索引具有更大的优势。 所以,笔者在数据库设置中,一般只有在三种情况下才采用位图索引。一是列的基数比较小,而有可能需要根据这些字段的内容查找相关的记录;二是在条件语句中,用到了AND或者OR运算符的时候。除了这两种情况外,最好能够采用其他适合的索引。第三种情况是,需要用到NULL作为查询的限制条件。因为标准查询一般情况下,会忽略所有的NULL值列。也就是说,若需要查询“所有没有身份证号码”的员工的信息的时候,标准索引并不能够起到加速查询速度的作用。此时,就需要采用位图索引。因为位图索引会记录相关的NULL值列信息。 建议二:创建索引的一些限制条件。 并不说,表或者列建立的索引越多越好。相反,索引建的越多,有时会反而会影响数据库运行的整体性能。所以,在建立索引的时候,仍然会有一些限制条件。 一是不要对一些记录内容比较少的表建立索引。在一个应用系统设计的时候,如设计一个ERP系统的数据库,其虽然有几千张表。但是,并不是每张表都有大量记录的。相反,其中有近一半左右的数据表,可能其存储的数据不会超过百条。如员工登陆帐户密码表、企业部门信息表等等。对于这些记录内容比较少的表,我们建立最好不要为其建立索引。无论是表上的,还是字段上,都不要建立索引。 二是若表中的内容比较大,但是,这个表基本上不怎么查询的时候,则只需要在表上建立索引即可;而不需要在字段上建立索引。如现在在ERP系统中,有一张表是“AD_Table”。其存储的是这个数据库中相关表的信息。这张表只有在数据库设计的时候才会用到。故这张表中的记录虽然比较多,但是由于用户用的比较少,所以,一般没有必要为这张表建立列级别上的索引。而直接用表索引来代替。
文章TAG:
数据 数据库 数据库索引 哪些 orace数据库索引有哪些