oracle怎么加快索引 oracle让索引失效

ORACLE索引提高效率用索引提高效率
索引是表的一个概念部分 用来提高检索数据的效率 实际上 ORACLE使用了一个复杂的自平衡B tree结构 通常 通过索引查询数据比全表扫描要快 当ORACLE找出执行查询和Update语句的最佳路径时 ORACLE优化器将使用索引 同样在联结多个表时使用索引也可以提高效率 另一个使用索引的好处是 它提供了主键(primary key)的唯一性验证
除了那些LONG或LONG RAW数据类型 你可以索引几乎所有的列 通常 在大型表中使用索引特别有效 当然 你也会发现 在扫描小表时 使用索引同样能提高效率
虽然使用索引能得到查询效率的提高 但是我们也必须注意到它的代价 索引需要空间来
存储 也需要定期维护 每当有记录在表中增减或索引列被修改时 索引本身也会被修改 这意味着每条记录的INSERT DELETE UPDATE将为此多付出 次的磁盘I/O 因为索引需要额外的存储空间和处理 那些不必要的索引反而会使查询反应时间变慢
定期的重构索引是有必要的
ALTER INDEX INDEXNAME REBUILD TABLESPACENAME
索引的操作
ORACLE对索引有两种访问模式
索引唯一扫描 ( INDEX UNIQUE SCAN)
大多数情况下 优化器通过WHERE子句访问INDEX
例如:
表LODGING有两个索引 : 建立在LODGING列上的唯一性索引LODGING_PK和建立在MANAGER列上的非唯一性索引LODGING$MANAGER
SELECT * FROM LODGING
WHERE LODGING = ROSE HILL ;
在内部 上述SQL将被分成两步执行 首先 LODGING_PK 索引将通过索引唯一扫描的方式被访问 获得相对应的ROWID 通过ROWID访问表的方式 执行下一步检索
如果被检索返回的列包括在INDEX列中 ORACLE将不执行第二步的处理(通过ROWID访问表) 因为检索数据保存在索引中 单单访问索引就可以完全满足查询结果
下面SQL只需要INDEX UNIQUE SCAN 操作
SELECT LODGING FROM LODGING WHERE LODGING = ROSE HILL ;
索引范围查询(INDEX RANGE SCAN)
适用于两种情况:
基于一个范围的检索
基于非唯一性索引的检索
例 :
SELECT LODGING FROM LODGING WHERE LODGING LIKE M% ;
WHERE子句条件包括一系列值 ORACLE将通过索引范围查询的方式查询LODGING_PK 由于索引范围查询将返回一组值 它的效率就要比索引唯一扫描低一些
例 :
SELECT LODGING FROM LODGING WHERE MANAGER = BILL GATES ;
这个SQL的执行分两步 LODGING$MANAGER的索引范围查询(得到所有符合条件记录的ROWID) 和下一步同过ROWID访问表得到LODGING列的值 由于LODGING$MANAGER是一个非唯一性的索引 数据库不能对它执行索引唯一扫描
由于SQL返回LODGING列 而它并不存在于LODGING$MANAGER索引中 所以在索引范围查询后会执行一个通过ROWID访问表的操作
WHERE子句中 如果索引列所对应的值的第一个字符由通配符(WILDCARD)开始 索引将不被采用
SELECT LODGING FROM LODGING WHERE MANAGER LIKE %HANMAN ;
在这种情况下 ORACLE将使用全表扫描
基础表的选择
基础表(Driving Table)是指被最先访问的表(通常以全表扫描的方式被访问) 根据优化器的不同 SQL语句中基础表的选择是不一样的
如果你使用的是CBO (COST BASED OPTIMIZER) 优化器会检查SQL语句中的每个表的物理大小 索引的状态 然后选用花费最低的执行路径
如果你用RBO (RULE BASED OPTIMIZER) 并且所有的连接条件都有索引对应 在这种情况下 基础表就是FROM 子句中列在最后的那个表
举例:
SELECT A NAME B MANAGER FROM WORKER A LODGING B
WHERE A LODGING = B LODING;
由于LODGING表的LODING列上有一个索引 而且WORKER表中没有相比较的索引 WORKER表将被作为查询中的基础表
多个平等的索引
当SQL语句的执行路径可以使用分布在多个表上的多个索引时 ORACLE会同时使用多个索引并在运行时对它们的记录进行合并 检索出仅对全部索引有效的记录
在ORACLE选择执行路径时 唯一性索引的等级高于非唯一性索引 然而这个规则只有
当WHERE子句中索引列和常量比较才有效 如果索引列和其他表的索引类相比较 这种子句在优化器中的等级是非常低的
如果不同表中两个想同等级的索引将被引用 FROM子句中表的顺序将决定哪个会被率先使用 FROM子句中最后的表的索引将有最高的优先级
如果相同表中两个想同等级的索引将被引用 WHERE子句中最先被引用的索引将有最高的优先级
举例:
DEPTNO上有一个非唯一性索引 EMP_CAT也有一个非唯一性索引
SELECT ENAME FROM EMP WHERE DEPT_NO = AND EMP_CAT = A ;
这里 DEPTNO索引将被最先检索 然后同EMP_CAT索引检索出的记录进行合并 执行路径如下:
TABLE ACCESS BY ROWID ON EMP AND EQUAL INDEX RANGE SCAN ON DEPT_IDX
INDEX RANGE SCAN ON CAT_IDX
等式比较和范围比较
当WHERE子句中有索引列 ORACLE不能合并它们 ORACLE将用范围比较
举例:
DEPTNO上有一个非唯一性索引 EMP_CAT也有一个非唯一性索引
SELECT ENAME FROM EMP WHERE DEPTNOAND EMP_CAT = A ;
这里只有EMP_CAT索引被用到 然后所有的记录将逐条与DEPTNO条件进行比较 执行路径如下:
TABLE ACCESS BY ROWID ON EMP
INDEX RANGE SCAN ON CAT_IDX
不明确的索引等级
当ORACLE无法判断索引的等级高低差别 优化器将只使用一个索引 它就是在WHERE子句中被列在最前面的
举例:
DEPTNO上有一个非唯一性索引 EMP_CAT也有一个非唯一性索引
SELECT ENAME FROM EMP WHERE DEPTNOAND EMP_CATA ;
这里 ORACLE只用到了DEPT_NO索引 执行路径如下:
TABLE ACCESS BY ROWID ON EMP
INDEX RANGE SCAN ON DEPT_IDX
我们来试一下以下这种情况:
SQL select index_name uniqueness from user_indexes where table_name = EMP ;
INDEX_NAME UNIQUENES
EMPNO UNIQUE
EMPTYPE NONUNIQUE
SQL select * from emp where empno = and emp_type = A ;
no rows selected
Execution Plan
SELECT STATEMENT Optimizer=CHOOSE
TABLE ACCESS (BY INDEX ROWID) OF EMP
INDEX (RANGE SCAN) OF EMPTYPE (NON UNIQUE)
虽然EMPNO是唯一性索引 但是由于它所做的是范围比较 等级要比非唯一性索引的等式比较低!
强制索引失效
如果两个或以上索引具有相同的等级 你可以强制命令ORACLE优化器使用其中的一个(通过它 检索出的记录数量少)
举例:
SELECT ENAME FROM EMP WHERE EMPNO =
AND DEPTNO= /*DEPTNO上的索引将失效*/
AND EMP_TYPE || = A /*EMP_TYPE上的索引将失效*/
这是一种相当直接的提高查询效率的办法 但是你必须谨慎考虑这种策略 一般来说 只有在你希望单独优化几个SQL时才能采用它
这里有一个例子关于何时采用这种策略
假设在EMP表的EMP_TYPE列上有一个非唯一性的索引而EMP_CLASS上没有索引
SELECT ENAME FROM EMP WHERE EMP_TYPE = A AND EMP_CLASS = X ;
优化器会注意到EMP_TYPE上的索引并使用它 这是目前唯一的选择 如果 一段时间以后 另一个非唯一性建立在EMP_CLASS上 优化器必须对两个索引进行选择 在通常情况下 优化器将使用两个索引并在他们的结果集合上执行排序及合并 然而 如果其中一个索引(EMP_TYPE)接近于唯一性而另一个索引(EMP_CLASS)上有几千个重复的值 排序及合并就会成为一种不必要的负担 在这种情况下 你希望使优化器屏蔽掉EMP_CLASS索引
用下面的方案就可以解决问题
SELECT ENAME FROM EMP WHERE EMP_TYPE = A AND EMP_CLASS|| = X ;
避免在索引列上使用计算.
WHERE子句中 如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.
举例:
低效
SELECT … FROM DEPT WHERE SAL *;
高效:
SELECT … FROM DEPT WHERE SAL/ ;
自动选择索引
如果表中有两个以上(包括两个)索引 其中有一个唯一性索引 而其他是非唯一性.
在这种情况下 ORACLE将使用唯一性索引而完全忽略非唯一性索引.
举例:
SELECT ENAME FROM EMP WHERE EMPNO =
AND DEPTNO = ;
这里 只有EMPNO上的索引是唯一性的 所以EMPNO索引将用来检索记录.
TABLE ACCESS BY ROWID ON EMP
INDEX UNIQUE SCAN ON EMP_NO_IDX
避免在索引列上使用NOT
通常我们要避免在索引列上使用NOT NOT会产生在和在索引列上使用函数相同的
影响 当ORACLE 遇到 NOT 他就会停止使用索引转而执行全表扫描
举例:
低效: (这里 不使用索引)
SELECT … FROM DEPT WHERE DEPT_CODE NOT = ;
高效: (这里 使用了索引)
SELECT … FROM DEPT WHERE DEPT_CODE;
需要注意的是 在某些时候 ORACLE优化器会自动将NOT转化成相对应的关系操作符
NOTto =
NOT = to
NOTto =
NOT = to
SQL select * from emp where NOT empno;
no rows selected
Execution Plan
SELECT STATEMENT Optimizer=CHOOSE
TABLE ACCESS (BY INDEX ROWID) OF EMP
INDEX (RANGE SCAN) OF EMPNO (UNIQUE)
SQL select * from emp where empno = ;
no rows selected
Execution Plan
SELECT STATEMENT Optimizer=CHOOSE
TABLE ACCESS (BY INDEX ROWID) OF EMP
INDEX (RANGE SCAN) OF EMPNO (UNIQUE)
两者的效率完全一样 也许这符合作者关于 在某些时候 ORACLE优化器会自动将NOT转化成相对应的关系操作符 的观点.
用=替代
如果DEPTNO上有一个索引
高效:
SELECT * FROM EMP WHERE DEPTNO =
低效:
SELECT * FROM EMP WHERE DEPTNO
lishixinzhi/Article/program/Oracle/201311/17710
Oracle新手入门:如何提高索引创建速度?默认情况下,数据库系统是不允许DML操作与创建索引的操作同时进行的 。也就是说,在创建索引的过程中,是不允许其他用户对其所涉及的表进行任何的DML操作 。这主要是因为对基础表进行DML操作时,会对基础表进行加锁 。所以在基础表上的DDL事务没有递交之前,即没有对基础表进行解锁之前,是无法对这基础表创建索引的 。反之亦然 。显然此时数据库没有采用这个ONLIE选项,继之DML操作与创建索引操作同时进行,主要是从创建索引的效率出发的 。防止因为两个作业相互冲突 , 从而延长某个作业的运行时间 。但是有时会我们必须允许他们进行同时操作 。如用户可能一刻都不能够离开数据库系统,需要时时刻刻对数据库基础表进行DML操作 。而此时由于某些原因 , 数据库管理员又需要重新建立索引时,那么不得不在创建索引的语句中加入这个ONLINE选项 。让他们同时运行 。此时虽然可能会延长索引创建作业的时间,但是可以保障用户DML操作能够正常进行 。有时候牺牲这个代价是值得的 。用户是不能够等的,而我们数据库管理员则可以勉强的等一会儿 。当然,如果用户对于这个DML操作及时性没有这么高 。如数据库管理员在晚上员工没有使用数据库时创建索引时,则可以不带这个选项 。在限制用户对基础表进行DML操作的同时,提高数据库创建索引的效率 。可选项五:PARALLEL,多服务进程创建索引默认情况下,Oracle数据库系统不采用这个选项 。这并不是说这个选项不可用 , 而是因为大多数情况下企业部署Oracle数据库时所采用的数据库服务器往往只有单个CPU 。此时数据库系统是用一个服务进程来创建索引的 。如果企业的服务器有多个CPU的话,则可以在创建索引时采用这个选项 。因为只要采用了这个选项 , 则数据库就会使用多个服务进程来并行的创建索引,以提高索引创建的速度 。为此,在同等条件下,多服务并行创建进索引并单服务创建索引速度要快的多 。所以如果服务器中有多个CPU , 而且需要创建的索引比较多或者基础表中记录比较多的话,则采用这个选项能够大幅度的提高索引的创建效率 。故笔者建议,如果采用多CPU的服务器时 , 最好在创建索引时使用这个选项 。不能够浪费了服务器的CPU呀 。不然的话,多CPU服务器的优势就体现不出来了 。为此采用这个选项,也是物尽其用 。希望本文讲到的内容对大家能有所帮助 。
oracle 如何使用索引,更快索引不是一句两句能讲清楚的
select * from test1 t where a in (select a from test2);
test1 大 ,test2 小,用in快
如何更好的使用Oracle全文索引不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR函数和LIKE操作符实现 。
SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle')0;
SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';
有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候.然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,而且实现的搜索功能也非常有限,因此对海量的文本数据进行搜索时,建议使用oralce提供的全文检索功能 建立全文检索的步骤步骤一 检查和设置数据库角色首先检查数据库中是否有CTXSYS用户和CTXAPP脚色 。如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能 。你必须修改数据库以安装这项功能 。默认安装情况下,ctxsys用户是被锁定的,因此要先启用ctxsys的用户 。步骤二 赋权 在ctxsys用户下把ctx_ddl的执行权限赋于要使用全文索引的用户,例:
grant execute on ctx_ddl to pomoho;
步骤三 设置词法分析器(lexer)
Oracle实现全文检索 , 其机制其实很简单 。即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle 称为 term)找出来,记录在一组 以dr$开头的表中,同时记下该term出现的位置、次数、hash 值等信息 。检索时,Oracle 从这组表中查找相应的term , 并计算其出现频率,根据某个算法来计算每个文档的得分(score),即所谓的‘匹配率’ 。而lexer则是该机制的核心,它决定了全文检索的效率 。Oracle 针对不同的语言提供了不同的 lexer, 而我们通常能用到其中的三个:
nbasic_lexer: 针对英语 。它能根据空格和标点来将英语单词从句子中分离,还能自动将一些出现频率过高已经失去检索意义的单词作为‘垃圾’处理 , 如if , is 等 , 具有较高的处理效率 。但该lexer应用于汉语则有很多问题,由于它只认空格和标点,而汉语的一句话中通常不会有空格,因此,它会把整句话作为一个 term,事实上失去检索能力 。以‘中国人民站起来了’这句话为例,basic_lexer 分析的结果只有一个term ,就是‘中国人民站起来了’ 。此时若检索‘中国’,将检索不到内容 。
nchinese_vgram_lexer: 专门的汉语分析器,支持所有汉字字符集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 ) 。该分析器按字为单元来分析汉语句子 。‘中国人民站起来了’这句话,会被它分析成如下几个term: ‘中’,‘中国’ , ‘国人’,‘人民’,‘民站’,‘站起’,起来’,‘来了’,‘了’ 。可以看出,这种分析方法 , 实现算法很简单,并且能实现‘一网打尽’,但效率则是差强人意 。
nchinese_lexer: 这是一个新的汉语分析器,只支持utf8字符集 。上面已经看到,chinese vgram lexer这个分析器由于不认识常用的汉语词汇,因此分析的单元非常机械,像上面的‘民站’,‘站起’在汉语中根本不会单独出现,因此这种term是没有意义的,反而影响效率 。chinese_lexer的最大改进就是该分析器 能认识大部分常用汉语词汇,因此能更有效率地分析句子 , 像以上两个愚蠢的单元将不会再出现,极大 提高了效率 。但是它只支持 utf8, 如果你的数据库是zhs16gbk字符集,则只能使用笨笨的那个Chinese vgram lexer.
如果不做任何设置,Oracle 缺省使用basic_lexer这个分析器 。要指定使用哪一个lexer, 可以这样操作:
第一. 当前用户下下建立一个preference(例:在pomoho用户下执行以下语句)
exec ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
第二.在建立全文索引索引时 , 指明所用的lexer:
CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context
parameters('lexer my_lexer');
这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器 。
步骤四 建立索引
通过以下语法建立全文索引
CREATE INDEX [schema.]index on [schema.]table(column) INDEXTYPE IS ctxsys.context [ONLINE]
LOCAL [(PARTITION [partition] [PARAMETERS('paramstring')]
[, PARTITION [partition] [PARAMETERS('paramstring')]])]
[PARAMETERS(paramstring)] [PARALLEL n] [UNUSABLE];
例:
CREATE INDEX ctx_idx_menuname ON pubmenu(menuname)
indextype is ctxsys.context parameters('lexer my_lexer')
步骤五 使用索引
使用全文索引很简单,可以通过:
select * from pubmenu where contains(menuname,'上传图片')0
全文索引的种类
建立的Oracle Text索引被称为域索引(domain index),包括4种索引类型:
l CONTEXT
2 CTXCAT
3 CTXRULE
4 CTXXPATH
依据你的应用程序和文本数据类型你可以任意选择一种 。
对多字段建立全文索引
很多时候需要从多个文本字段中查询满足条件的记录,这时就需要建立针对多个字段的全文索引,例如需要从pmhsubjects(专题表)的 subjectname(专题名称)和briefintro(简介)上进行全文检索,则需要按以下步骤进行操作:
?建议多字段索引的preference
以ctxsys登录,并执行:
EXEC ctx_ddl.create_preference(' ctx_idx_subject_pref',
'MULTI_COLUMN_DATASTORE');
? 建立preference对应的字段值(以ctxsys登录)
EXEC ctx_ddl.set_attribute(' ctx_idx_subject_pref ','columns','subjectname,briefintro');
? 建立全文索引
CREATE INDEX ctx_idx_subject ON pmhsubjects(subjectname)
INDEXTYPE ISctxsys.CONTEXT PARAMETERS('DATASTORE ctxsys.ctx_idx_subject_pref lexer my_lexer')
? 使用索引
select * from pmhsubjects where contains(subjectname,'李宇春')0
全文索引的维护
对于CTXSYS.CONTEXT索引,当应用程序对基表进行DML操作后,对基表的索引维护是必须的 。索引维护包括索引同步和索引优化 。
在索引建好后,我们可以在该用户下查到Oracle自动产生了以下几个表:(假设索引名为myindex):
DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N其中以I表最重要 , 可以查询一下该表,看看有什么内容:
SELECT token_text, token_count FROM dr$i_rsk1$I WHERE ROWNUM = 20;
这里就不列出查询接过了 。可以看到,该表中保存的其实就是Oracle 分析你的文档后,生成的term记录在这里,包括term出现的位置、次数、hash值等 。当文档的内容改变后,可以想见这个I表的内容也应该相应改变,才能保证Oracle在做全文检索时正确检索到内容(因为所谓全文检索,其实核心就是查询这个表) 。这就用到sync(同步) 和 optimize(优化)了 。
同步(sync): 将新的term 保存到I表;
优化(optimize): 清除I表的垃圾,主要是将已经被删除的term从I表删除 。
当基表中的被索引文档发生insert、update、delete操作的时候 , 基表的改变并不能马上影响到索引上直到同步索引 。可以查询视图 CTX_USER_PENDING查看相应的改动 。例如:
SELECT pnd_index_name, pnd_rowid,
TO_CHAR (pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss') timestamp
FROM ctx_user_pending;
该语句的输出类似如下:
PND_INDEX_NAMEPND_ROWIDTIMESTAMP
------------------------------ ------------------ --------------------
MYINDEXAAADXnAABAAAS3SAAC 06-oct-1999 15:56:50
同步和优化方法: 可以使用Oracle提供的ctx_ddl包同步和优化索引
一.对于CTXCAT类型的索引来说 , 当对基表进行DML操作的时候 , Oracle自动维护索引 。对文档的改变马上反映到索引中 。CTXCAT是事务形的索引 。
索引的同步
在对基表插入,修改,删除之后同步索引 。推荐使用sync同步索引 。语法:
ctx_ddl.sync_index(
idx_name IN VARCHAR2 DEFAULT NULL
memory IN VARCHAR2 DEFAULT NULL,
part_name IN VARCHAR2 DEFAULT NULL
parallel_degree IN NUMBER DEFAULT 1);
idx_name索引名称
memory指定同步索引需要的内存 。默认是系统参数DEFAULT_INDEX_MEMORY。
指定一个大的内存时候可以加快索引效率和查询速度 , 且索引有较少的碎片
part_name 同步哪个分区索引 。
parallel_degree 并行同步索引 。设置并行度 。
例如:
同步索引myindex:Execctx_ddl.sync_index ('myindex');
实施建议:建议通过oracle的job对索引进行同步
索引的优化
经常的索引同步将会导致你的CONTEXT索引产生碎片 。索引碎片严重的影响了查询的反应速度 。你可以定期优化索引来减少碎片,减少索引大小,提高查询效率 。
当文本从表中删除的时候 , Oracle Text标记删除的文档,但是并不马上修改索引 。因此,就的文档信息占据了不必要的空间 , 导致了查询额外的开销 。你必须以FULL模式优化索引 , 从索引中删除无效的旧的信息 。这个过程叫做垃圾处理 。当你经常的对表文本数据进行更新,删除操作的时候,垃圾处理是很必要的 。
execctx_ddl.optimize_index ('myidx', 'full');
实施建议:每天在系统空闲的时候对全文索引进行相应的优化,以提高检索的效率
P.S.定时优化索引
3.定时优化同步域索引
创建定时任务,定期优化和同步域索引
SQL create or replace procedure hsp_sync_index as
2begin
3ctx_ddl.sync_index('id_cont_msg');
4end;
5/
Procedure created.
Elapsed: 00:00:00.08
SQL VARIABLE jobno number;
SQL BEGIN
2 DBMS_JOB.SUBMIT(:jobno,'hsp_sync_index();',
3 SYSDATE, 'SYSDATE(1/24/4)');
4 commit;
5 END;
6 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.27
SQL create or replace procedure hsp_optimize_index as
2begin
3ctx_ddl.optimize_index('id_cont_msg','FULL');
4end;
5/
SQL VARIABLE jobno number;
SQL BEGIN
2 DBMS_JOB.SUBMIT(:jobno,'hsp_optimize_index();',
3 SYSDATE, 'SYSDATE1');
4 commit;
5 END;
6 /
Procedure created.
Elapsed: 00:00:00.03
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.02
SQL
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:更改库表的列名
ALTERTABLE AAARENAMECOLUMNID TOAAA_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_NAMETABLE_NAMECOLUMN_NAME ------------------------------ ------------------------- SYS_AAAAAAID
//查找索引
select index_name,index_type,uniqueness from user_indexes where table_name='AAA'; INDEX_NAMEINDEX_TYPEUNIQUENES
【oracle怎么加快索引 oracle让索引失效】关于oracle怎么加快索引和oracle让索引失效的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读