oracle 查询不走索引的范例分析

like 后%位置不走索引问题

create table t2 as select * from dba_objects;——创建表
create index idx_t2_name on t2(object_name);——创建索引
set autotrace on ——开启执行计划跟踪
select * from t2 where object_name like ‘DE%‘;——走索引
select * from t2 where object_name like ‘%DE‘;——不走索引

查询字段类型与表字段类型不一致导致隐式转换,不走索引问题

create table t3(id varchar2(10),name varchar2(10));——创建表t3
insert into t3 select * from dba_objects;——插入数据
commit; ——提交
create index idx_t3_id on t3(id);创建id索引
set autotrace on——开启执行计划自动跟踪
select * from t3 where id=7000;——不走索引,会出现隐式转换,filter(TO_NUMBER("ID")=7000)
select * from t3 where id=‘7000‘;——走索引,cost大大提升

另:不要用select ‘*‘ from........写select 星号时,oracle会查询数据字典再转换成具体的列名,增加oracle的开销,建议写具体字段名称。
附:查询表的索引信息
select INDEX_NAME,INDEX_TYPE,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes where table_name=‘T1‘;

原文地址:http://blog.51cto.com/12185273/2063034

时间: 2024-12-12 15:19:02

oracle 查询不走索引的范例分析的相关文章

Update关联查询不走索引,效率低下

这两天优化一个sql,就是有A,B两个表,要利用b表的字段更新a表对应的字段.形如 Sql代码 update A set A.a=(select B.b from B where A.id=B.id); 原SQL updatepntmall_rptpoint_detail a set a.scrm_rptpnt_processed=( select distinctb.scrm_rptpnt_processed  frompntmall_rptpoint_detail_tmp b where a

查询不走索引的情况

不走索引的情况还是蛮多的1.条件字段选择性弱,查出的结果集较大,不走索引:2.where条件等号两边字段类型不同,不走索引:3.优化器分析的统计信息陈旧也可能导致不走索引:4.索引字段 is null 不走索引:5.对于count(*)当索引字段有not null约束时走索引,否则不走索引:6.like 后面的字符当首位为通配符时不走索引:7.使用不等于操作符如:<>.!= 等不走索引:8.索引字段前加了函数或参加了运算不走索引:

经过字段类型转化后的查询不走索引

表结构如下: mysql> show create table tag_item_list\G*************************** 1. row ***************************       Table: tag_item_listCreate Table: CREATE TABLE `tag_item_list` (  `tag_item_list_id` bigint(20) unsigned NOT NULL auto_increment,  `ta

Oracle直方图导致SQL不走索引.

在ITPUB 上看到一个帖子 http://www.itpub.net/thread-1875212-1-1.html 同一条SQL语句,只有查询条件不一样,查询返回的结果集都为0,一个走了全表扫描,一个走索引.查看全表扫描的SQL语句:SQL走全表,产生了2422609个逻辑读,cost为535KSQL> SELECT URL,YHZH,HFRZY,HFLR,SPURL,TPURL,YPURL,SCSJ,LY,JCSJ FROM YHXX_HFXX T 2       WHERE T.URL=

oracle 不走索引的原因

create table tb2 as select * from emp;alter table tb2 modify empno number(4) not null;翻到20W行 create index idxtb21 on tb2(empno); select INDEX_NAME from dba_indexes where table_name='TB2';--验证index建立起来 set autotrace on; select distinct empno from tb2;

oracle执行计划不走索引的原因总结

在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要就介绍这部分内容,接下来就让我们一起来了解一下.一. 不走索引大体有以下几个原因: 你在Instance级别所用的是all_rows的方式 你的表的统计信息(最可能的原因) 你的表很小,上文提到过的,Oracle的优化器认为不值得走索引. 解决方法: 可以修改init.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库.也可以使用4

oracle 不走索引的几种情况

不走索引的其它原因:   1.建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEX SKIP SCAN概念.   2.在包含有null值的table列上建立索引,当时使用select count(*) from table时不会使用索引.   3.在索引列上使用函数时不会使用索引,如果一定要使用索引只能建立函数索引.   4.当被索引的列进行隐式的类型转换时不会使用索引.如:select * from t where indexed_column = 5,而indexed_co

oracle如何进行索引监控分析和优化

在生产环境.我们会发现: ① 索引表空间 I/O 非常高     ② "db file sequential read" 等待事件也比较高   这种迹象表明.整个数据库系统.索引的读写操作比较多.已经成为系统的主要瓶颈      一般的原因.大抵如下:   ① 大量SQL均采用索引   ② DML操作导致索引维护工作量暴增   ③ 频繁DML导致很多索引碎片.增加I/O开销   ④ 索引建立策略失误.走索引如同全表扫      如果.一张表字段30个.但索引竟有 50个!?   作为

Oracle不走索引的原因

Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要就介绍这部分内容,接下来就让我们一起来了解一下  .        不走索引大体有以下几个原因:        你在Instance级别所用的是all_rows的方式        你的表的统计信息(最可能的原因)        你的表很小,上文提到过的,Oracle的优化器认为不值得走索引  .        解决方法:        可以修改init.ora中的OPTI