select * from user_ind_columns where table_name = upper('agent_master') // agent_master为表名
1.应该是可行的,具体会不会节省时间试一下就可以了。
2.大概每个月存储四五十万的数据,里面只保存最新四个月的数据 每次create这7个索引用时都特别长,大概需要三四个小时; 200万的数据,重建索引花费的时间太长了;很奇怪。
3.估计之前的先drop掉索引,然后插入数据完毕后create索引也是为了避免插入数据时,索引对插入效率的影响。
提供一种直观的方法:(前提是有索引。
如果没有索引可以直接新建唯一索引)1、使用plsql工具连接数据库,输入表名
2、将光标移动到表名上,鼠标右键选择编辑(edit)
3、在弹出来的窗口中切换到索引页签(index)
4、在类型(type)那一栏选unique,点击窗口左下角的应用(apply)保存即可
索引。当然还是效率更高一些了。
查看约束
select * from user_constraints where table_name='';
Oracle中我们经常使用Date字段类型记录日期和时间,有的时候还在这个字段上建立索引。
然后通过Java程序访问数据库的时候,我们很自然的类似这样使用:select * from table where endDate>? and endDate<?,然后通过PreparedStatement预编译,再通过setTimestamp传入由java.util.Date转成java.sql.Timestamp的参数(因为java.sql.Date只有日期,java.sql.Time只有时间,所以我们只能用java.sql.Timestamp类型)。我们会认为这样应该走索引区间扫描,效率应该是非常高的。
而事实上,Oracle会把sql解释成如下这样来执行:select * from table where TO_TIMESTAMP(endDate)>? and TO_TIMESTAMP(endDate)<?; 为什么?因为传入的参数是timestamp类型,Oracle从9.2版本以后支持这种类型,所以Oracle做了这样的转换,结果就是这个SQL执行变成了全表扫描。我们做的试验,加了一个index hint,强制走时间索引字段,结果效率也不高,sql执行变成了全索引扫描,和全表扫描没多大区别。结果效率还是低。
不光直接使用JDBC会是这样,Spring,iBatis在处理传入参数是java.util.Date类型的时候,都会使用setTimestamp设定参数,所以都需要注意。
这种现象多出现在分区表,之后创建和删除分区的时候引起全局索引失效,这个一般的解决方法是重现创建索引,还有一种是把全局索引创建成local的就可以了。这个您可以上网查查全局索引和local索引的区别。
不能直接修改,只能先drop单列的index.再创建多列的复合索引。
有两种方法: (1)视图dba_constraints (2)视图dba_indexes 设置一个字段,为主键,这个主键就是不重复的,主键的内容可以使用oracle的sequence。
方法一、 视图dba_constraints,这张表中有所有的表的约束,拥有唯一约束的字段就拥有唯一索引,其中Constraint_type的值应该是U,不过值是R的表示主键,这个也存在唯一索引,不知道你要不要找这种,所以个人认为在这张表内能找到。方法二: 视图dba_indexes,这里的index_type应该也能查到唯一索引。
方法如下:
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