精华内容
下载资源
问答
  • Oracle 索引不生效 解决方法

    千次阅读 2019-11-29 08:24:10
    先说说问题吧,为一个表的字段创建索引但是执行查询的时候他就是不会用到这个索引,于是我反复删了建,建了删。最后放弃。希望有哪个大牛看到这个文章的时候可以指点一二。 最后我用Oracle 的强制索引方法才解决...

    昨天一天和Oracle数据的表索引杠了一天。先说说问题吧,为一个表的字段创建了索引但是执行查询的时候他就是不会用到这个索引,于是我反复删了建,建了删。最后放弃。希望有哪个大牛看到这个文章的时候可以指点一二。

    最后我用Oracle 的强制索引方法才解决了查询效率问题。

    强制索引的语法。

    /*+index(表别名 表的索引名)*/

    用法也是很简单,只需要在查询语句前面加上这个就OK了。

    SELECT  /*+index(a IND02_test1)*/  * FROM  test1 A WHERE A.ER020='123' 

    2020年2月

    最近发现这个强制索引不止在查询语句可以使用,更新语句也可以使用

    只需要 update /*+index(a IND02_test1)*/  test1 a  set a.ER020='456'  WHERE A.ER020='123' 

    这样也能提升更新语句的速度

     

    ---------------------------华丽的求赞分割线----------------------------------------------------------------

     

    展开全文
  • 备注:添加索引之后验证索引有效性: 执行1:EXPLAIN PLAN FOR select accouts, accrate, completeratio, def1, def10, def11, def12, def13, def14, def15, def16, def17, def18, def19, def2, def20, def3, def4,...

    备注:添加索引之后验证索引有效性:

    执行1:EXPLAIN PLAN FOR select accouts, accrate, completeratio, def1, def10, def11, def12, def13, def14, def15, def16, def17, def18, def19, def2, def20, def3, def4, def5, def6, def7, def8, def9, isdeposit,

    isprepayment, memo, oprnum, paymentday, pk_contr, pk_contr_pay, pk_group, pk_org, pk_org_v, pk_paymentch, pk_wbs, qual_time, rowno, sched_taxmny, taxmny, tot_sld_taxmny, pcm_contr_protocol.ts  from pcm_contr_protocol where  pcm_contr_protocol.pk_contr = '10013D100000000394IF'  AND pcm_contr_protocol.dr = 0;

     

    执行2:SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));

     

     

     

    如上图 索引生效;

     

     

    ​create index INDEX_pcm_contr_protocol_1 on pcm_contr_protocol (pk_contr);

    如上图索引不生效;

    更新统计信息:

    analyze table pcm_contr_protocol compute statistics;

     

    ANALYZE TABLE pcm_contr_protocol COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;

     

    analyze table pcm_contr_protocol compute statistics for table for all indexes for all indexed columns;

    展开全文
  • 虽然几张表的数据量都比较大(都在百万级以上),但是也都有正确创建索引知道到底慢在了哪里,下面展开调查。 经过几次排除,把问题范围缩小在索引上,首先在确定索引本身没有问题的前提下,考虑索引有没有被...
  • 当某张表建立时间比较长以及该表频繁的进行插入,更新操作时,将出现索引失效问题。
  • 首先从原表导了1500W数据进行测试,测试时索引查一条记录大约一分钟。后来加了个Normal索引,查询时间在2秒以内,觉得很满意,所以按照相同结构又建了个表,用的一样的数据,准备再试验一次,查了查,确实慢,遂...
  • oracle 索引失效原因

    2020-12-20 05:19:26
    1) 没有查询条件,或者查询条件没有建立索引2) 在查询条件上没有使用引导列3) 查询的数量是大表的大部分,应该是30%以上。4) 索引本身失效5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*...

    1) 没有查询条件,或者查询条件没有建立索引

    2) 在查询条件上没有使用引导列

    3) 查询的数量是大表的大部分,应该是30%以上。

    4) 索引本身失效

    5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等)

    错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;

    6) 对小表查询

    7) 提示不使用索引

    8) 统计数据不真实

    9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。

    10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.

    由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给数据库,

    这样会导致索引失效. 错误的例子:select * from test where tu_mdn=13333333333;

    正确的例子:select * from test where tu_mdn='13333333333';

    12) 1,<> 2,单独的>,

    13,like "%_" 百分号在前.

    4,表没分析.

    15,单独引用复合索引里非第一位置的索引列.

    16,字符型字段为数字时在where条件里不添加引号.

    17,对索引列进行运算.需要建立函数索引.

    18,not in ,not exist.

    19,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。

    20,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走

    21,联合索引 is not null 只要在建立的索引列(不分先后)都会走,

    in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,

    其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),

    或者=一个值; 当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),

    以上两种情况索引都会走。其他情况不会走。

    ---------

    MyISAM 存储引擎索引键长度总和不能超过1000 字节;

    BLOB 和TEXT 类型的列只能创建前缀索引;

    MySQL 目前不支持函数索引;

    使用不等于(!= 或者<>)的时候MySQL 无法使用索引;

    过滤字段使用了函数运算后(如abs(column)),MySQL 无法使用索引;

    Join 语句中Join 条件字段类型不一致的时候MySQL 无法使用索引;

    使用LIKE 操作的时候如果条件以通配符开始( '%abc...')MySQL 无法使用索引;

    使用非等值查询的时候MySQL 无法使用Hash 索引;

    在我们使用索引的时候,需要注意上面的这些限制,尤其是要注意无法使用索引的情况,因为这很容易让我们因为疏忽而造成极大的性能隐患。

    展开全文
  • -- GRANT QUERY REWRITE TO TEST;SQL> CREATE INDEX TEST.FBIDX_A_DT ON TEST.A(TO_CHAR(DT,'YYYY...索引创建。SQL> @DELPLAN已删除11行。提交完成。SQL> EXPLAIN PLAN FOR2SELECT COUNT(*) FROM TEST.A...
  • Oracle索引创建及管理

    2021-04-30 10:41:07
    Oracle索引创建及管理1.Oracle索引简介在Oracle数据库中,存储的每一行数据都有一个rowID来标识。当Oracle中存储着大量的数据时,意味着有大量的rowID,此时想要快速定位指定的rowID,就需要使用索引对象。当对...
  • ‍1,<> 2,单独的>,<,(有时会用到,有时不会) 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索引里非第一位置的...11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10
  • Oracle索引失效起作用如何解决

    千次阅读 2018-11-01 22:36:45
    当某表的某个字段建了索引,但是查询发现没有走索引,此时可能是索引失效。 1:强制走索引 原sql: select * from 表名 where id = 12345; 强制走索引: select /*+index(表名,索引名)*/ * from 表名 where id = ...
  • 3、索引创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取值分散的列上,避免对同一张表创建过多的索引4、索引的使用对用户来说是透明的,由系统来决定什么时候使用索引。5、Oracle...
  • oracle 可见索引

    2021-05-06 09:31:39
    #########################一.可见索引########################## --1.新建可见索引表 create table t1 ( sid int not null , sname varchar2(10) ) tablespace test; --循环导入数据 declare maxrecor...
  • 创建索引时使用nologging选项可以加快速度,节省时间,减少产生的日志量。SQL> select count(*) from idx_test;COUNT(*)----------1620416Executed in 4.453 secondsSQL> select value from v$sysstat t where...
  • Oracle索引建立原则确定针对该表的操作是大量的查询操作还是大量的增删改操作。尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。where语句中不得对查询列采用函数...
  • 如果一个函数(function)或表达式(expression)使用了一个表的一列或多 列,则用户可以依据...用户创建的函数索如果一个函数(function)或表达式(expression)使用了一个表的一列或多列,则用户可以依据这些函数或表达式...
  • oracle 索引失效原因及解决方法2010年11月26日 星期五 17:10一、以下的方法会引起索引失效‍1,<>2,单独的>,3,like "%_" 百分号在前.4,表没分析.5,单独引用复合索引里非第一位置的索引列.6,字符型字段为数字...
  • oracle 索引失效的原因

    2021-05-08 05:19:36
    引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 创建函数索引方式: 表dept,有col_1,col_2,现在对col_1做upper函数索引 这样...
  • 二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT、GROUP BY等子句中包含非复合索引列例句:用索引SELECTCORP.BATCHCODE, CORP.CLITNO,CORP.LOANBLANFROM VI_CORPCLIT_INFO CORPWHERE CORP.BATCHCODE ...
  • 但是,由于对链接答案的评论提出疑问,我使用oracle 11g进行了实验:作为用户sonia:sql> create table t as (select level n from dual connect by level < 100);Table created.sql> expl...
  • 1.创建索引create index on () [tablespace];如:简单索引:create index BOOK_INFO_INDEX_1 on BOOK_INFO(ISBN);复合索引:create index BOOK_INFO_INDEX_1 on BOOK_INFO(COLUMN1,COLUMN2,COLUMN3);复合索引使用...
  • 最近及今后很长一段时间都要使用oracle,今天和同事也遇到一个oracle 慢查询问题。查了很多资料,这里记录备忘。持续更新ing。。。一、查看执行计划EXPLAIN PLAN FOR待执行的sql;(不要忘了分号)SELECT * FROM TABLE ...
  • oracle数据库索引失效

    2021-05-03 09:17:44
    说实在的,失效的原因有多种:但是如果是同样的sql如果在之前能够使用到索引,那么现在使用索引,以下几种主要情况:1. 随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费...
  • oracle 指定索引

    2021-05-02 07:43:03
    表中如果创建多个索引, 测试发现使用不同索,查询效率有较大差别。 我们希望使用某个更快的索引, 这个时候需要指定索引,以明确告诉oracle使用更快的索引oracle指定索引语法:/*+index(t ind_name)*/“t”: 为...
  • Oracle中查询时候使index索引失效的限制条件昨天,由于最近的项目需要进入到测试人员进行测试的阶段。因此,自己搭建好了测试环境---进行了测试。但是,奇怪的事情就发生了。以前在我自己本地开发的环境的时候却没有...
  • 没有简短的答案.它完全取决于你的数据和你如何使用它.这里有一些需要考虑的事情:由于@NullUserException指出,通常每天晚上都会自动收集统计信息....创建一个新的指数 – No. “Oracle Database now...
  • 每隔一段时间,我们就需要在Oracle中重建索引,因为随着时间的推移,索引变得支离破碎。这会导致其性能(以及扩展)导致数据库查询的性能下降。因此,不时地重建索引会非常有益。话虽如此,索引不应该经常重建,因为这...
  • Oracle数据库索引失效

    2017-02-15 10:59:02
     由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.  错误的例子:select * from test where tu_mdn=13333333333;  正确的例子:select * from ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,905
精华内容 7,162
关键字:

oracle创建索引不生效