oracle数据库索引种类?
1.b-tree索引Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATEINDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。
2.位图索引(bitmapindex)位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有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中创建了索引,什么样的原因可能使索引不能正常使用?
在以下这些情况下索引会失效
1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。
2、对索引列进行了加减乘除运算也会造成索引失效
3、基于cost的成本分析,访问的表过小,使用全表扫描的消耗小于使用索引。
4、使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,一般大于5%-15%就不走索引而走FTS。
5、单独的>、<。
6、like “%_” 百分号在前。
7、单独引用复合索引里非第一位置的索引列。
8、字符型字段为数字时在where条件里不添加引号。
9、当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10、索引失效,可以考虑重建索引,rebuild online。
11、B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走、联合索引 is not null 只要在建立的索引列(不分先后)都会走
oracle分区表怎么创建索引?
方法如下:
Oracle中建立索引,会提高查询速度: create index 索引名 on 表名(列名);
例如:
create index index_userid on tbl_detail(userid);
如何找数据库表的主键字段的名称?
SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE=’P’ and table_name=’AAA’; select * from dba_cons_columns where CONSTRAINT_NAME=’SYS_AAA’;
Oracle 在创建主键(可以不加constraint SYS_AAA),会为库表自动创建索引,
索引的列为主键列。 并且当库表某些列名或者库表名改变时候,
Oracle自动创建的索引SYS_AAA,中的索引列也会自动更新(类似于视图),并且SYS_AAA会与名字更改后的库表还是保持索引关系。 关键系统库表: desc dba_constraints desc dba_cons_columns
desc dba_indexes desc dba_ind_columns desc DBA_TAB_COLUMNS
例子1:更改库表的列名
ALTER TABLE AAA RENAME COLUMN ID TO AAA_ID; create table AAA ( ID NUMBER(8), NAME CHAR(20),
constraint SYS_AAA primary key(ID) );
//查找约束名字
select c.CONSTRAINT_NAME,c.table_name,cc.COLUMN_NAME from user_constraints c, user_cons_columns cc
where c.constraint_name=cc.constraint_name and c.table_name =’AAA’ AND C.CONSTRAINT_TYPE=’P’;
CONSTRAINT_NAME TABLE_NAME COLUMN_NAME
SYS_AAA AAA ID
//查找索引
select index_name,index_type,uniqueness from user_indexes where table_name=’AAA’; INDEX_NAME INDEX_TYPE UNIQUENES
oracle用in会使用索引吗?
会的。
Oracle建立索引的目的是为了避免全表扫描,提高查询的效率。
但是有些情况下,即使建立了索引,但是执行写出来的查询还是很慢,然后通过执行计划会发现是索引失效导致的(不走索引,走全表扫描)。所以需要了解一下有哪些些情况会导致索引失效,即查询不走索引的原因。
oracle怎么,设置唯一索引?
有两种方法: (1)视图dba_constraints (2)视图dba_indexes 设置一个字段,为主键,这个主键就是不重复的,主键的内容可以使用oracle的sequence。
方法一、 视图dba_constraints,这张表中有所有的表的约束,拥有唯一约束的字段就拥有唯一索引,其中Constraint_type的值应该是U,不过值是R的表示主键,这个也存在唯一索引,不知道你要不要找这种,所以个人认为在这张表内能找到。方法二: 视图dba_indexes,这里的index_type应该也能查到唯一索引。
oracle的默认索引是什么?
oracle的默认情况下,索引是B-tree。这些都是平衡的。这意味着所有的叶节点都位于树中的相同深度。所以访问任何值的工作量(O(log n))是一样的。每个叶索引条目都指向一个行。
索引是一种供服务器在表中快速查找一个行的数据库结构。合理使用索引能够大大提高数据库的运行效率。
oracle中视图可以创建索引吗?
oracle中视图可以创建索引,创建索引方法为:
1、打开Navicat。
2、右击oracle数据库,然后点击【打开连接】。
3、点击【其它】,然后点击【索引】,此时显示oracle数据库中所有的索引。
4、点击【新建索引】,进入索引设计界面。
5、在【常规】标签页,设置类型、表格式、表名、列名等。
6、在【高级】标签页,设置表空间、记录等选项。
7、点击【保存】,输入索引名称,然后点击【确定】。
Oracle如何在属性上创建索引?
table: create table ta (fa varchar2(10), fb number)
; create index idx_ta_fb on ta(fb)
; 这是最简单的,在这个基础上还可以加其他条件,例如唯一性等。 同时还有其他方法也可以创建索引。 如果你有pl/sql,可以查看一下表的定义,其中有索引的部分。 然后点击“SQL“就可以看到更多的语句的写法。
create index idx_xxx on tablename(columnname)
; create index my_index_name on abc(column_name) 其中: my_index_name :索引名字 abc 表名 column_name 字段名
oracle怎么用sql查询表索引?
1、在计算机中,打开Oracle的连接程序,用新建的数据库管理员,进入【Oracle控制】的窗口上,鼠标左键单击【服务器】按钮,并选择【SQL工作表】
2、接着,在【Oracle服务器】的窗口上,在输入窗口中输入SQL查询语句,并单击【执行】按钮,可以看到查询不到索引表,需要调整SQL语句
3、然后,在【SQL工作表】的窗口上,输入查询索引表的SQL语句,可以作为参考
4、接着,在【SQL工作表】的窗口上,输查询索引表的SQL语句,并单击【执行】按钮
5、然后,在【SQL工作表】的窗口上,可以看到SQL语句执行成功的提示信息,查询到用户的索引表中的字段
6、接着,在【SQL工作表】的窗口上,修改索引表的名称,并单击【执行】按钮
7、最后,在【SQL工作表】的窗口上,通过查询的索引表语句,显示出索引表的字段名称了