诊断一句SQL不走索引的原因
from http://www.itpub.net/thread-1852897-1-1.html
有论坛朋友在上面的帖子里问SQL为什么不走索引,正好这两天我也刚刚在看SQL优化,于是试着回答了一下.
下面是原来的SQL:
select o.order_id as orderId from order_info o, member m
where m.member_id = o.member_id
and o.is_delete = 'N'
/*and (to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') >=
to_date('2014-03-27 00:00:00', 'YYYY-MM-DD hh24:mi:ss'))
and (to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') <=
to_date('2014-03-27 23:59:59', 'YYYY-MM-DD hh24:mi:ss'))*/
and o.commit_time like '2014-03-27%'
and ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or
(o.payment_mode = 'HDFK'))
and o.order_state NOT in (18, 19, 25)
and (exists (select 1
from fecerp.sys_role_select rs, fecerp.sys_role_user su
where su.role_id = rs.role_id
and su.user_id = 3132
and su.is_delete = 'N'
and rs.othera = 0) OR exists
(select 1
from fecerp.sys_role_select rs,
fecerp.sys_role_user su,
product_yw_catalog pyc,
product_yw_catalog_goods ycg,
order_item oi
where su.role_id = rs.role_id
and pyc.yw_catalog_id = ycg.wy_catalog_id
and su.user_id = 3132
and rs.othera <> 0
and su.is_delete = 'N'
and ',' || rs.bus_ids || ',' like
'%,' || pyc.yw_catalog_id || ',%'
and oi.order_id = o.order_id
and oi.is_delete = 'N'
and ycg.goods_no = oi.goods_no))
and (select m.multi_channel_id
from ec_multi_channel m
where m.multi_channel_id = o.multi_channel_id) in
(select ser.multi_channel_id
from fecerp.sys_role_channel ser, fecerp.sys_role_user uss
where ser.role_id = uss.role_id
and ser.is_delete = 'N'
and uss.is_delete = 'N'
and uss.user_id = 3132)
执行计划:

order_info 索引如下:

和统计信息的关系不大,至少表order_info 的统计信息是正确的,否则table full access的cost不会这么高.
不走索引应该是下面的原因.
- o.is_delete = 'N' --这个字段上没有索引
- o.commit_time like '2014-03-27%' --这个字段上没有索引
- ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or (o.payment_mode = 'HDFK')) --在payment_mode 和 IS_PAID 上虽然分别有索引,但是 对于条件 o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') 如果走索引,那么是需要同时判断这两个字段的值. 这里没有基于这两个字段的索引,所以也走不了.
- o.order_state NOT in (18, 19, 25) -- not in 排除常量,走不了索引
推荐在 payment_mode 和 IS_PAID 上建立一个组合索引.
诊断一句SQL不走索引的原因的更多相关文章
- SQL语句优化、mysql不走索引的原因、数据库索引的设计原则
SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...
- mysql 索引优化,索引建立原则和不走索引的原因
第一:选择唯一性索引 唯一性索引的值是唯一的,可以更快捷的通过该索引来确定某条记录. 2.索引的列为where 后面经常作为条件的字段建立索引 如果某个字段经常作为查询条件,而且又有较少的重复列或者是 ...
- oracle 不走索引的原因
create table tb2 as select * from emp;alter table tb2 modify empno number(4) not null;翻到20W行 create ...
- Oracle执行计划不走索引的原因总结
在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要就介绍这部分内容,接下来就让我们一起来了解一下. 不走索引大体有以下几个原 ...
- 【摘】Oracle执行计划不走索引的原因总结
感谢原博主 http://soft.chinabyte.com/database/364/12471864.shtml 在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的 ...
- 什么样的 SQL 不走索引
参考: MySQL 索引优化全攻略 索引建立的规则 1.能创建唯一索引就创建唯一索引 2.为经常需要排序.分组和联合操作的字段建立索引 3.为常作为查询条件的字段建立索引 如果某个字段经常用来做查询条 ...
- ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度
(一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...
- Oracle直方图导致SQL不走索引.
在ITPUB 上看到一个帖子 http://www.itpub.net/thread-1875212-1-1.html 同一条SQL语句,只有查询条件不一样,查询返回的结果集都为0,一个走了全表扫描, ...
- mysql 索引优化,不走索引的原因
1.WHERE字句的查询条件里有不等于号(WHERE column!=…),MYSQL将无法使用索引 2.类似地,如果WHERE字句的查询条件里使用了函数(如:WHERE DAY(column)=…) ...
随机推荐
- Winform窗体事件发生顺序
Form 和Control 类公开了一组与应用程序启动和关闭相关联的事件.当Windows 窗体应用程序启动时,主窗体的启动事件按以下顺序引发: System.Windows.Forms.Contro ...
- Html - Bootstrap Panel面板
http://v3.bootcss.com/components/#panels Bootstrap Panel面板 <div class="panel panel-default&q ...
- [GE]导入图片至Word,然后按规则命名(2/2)
#将所有docx文件改成可读 Set-ItemProperty -Path "e:\screenshot\*.docx" -Name IsReadOnly -Value $fals ...
- 在Copy-Item中集成认证信息以拷贝文件
$source = "c:\XXX.XXX" $pw = ConvertTo-SecureString '密码' -AsPlainText -Force $Creds = New- ...
- 【iHMI43真彩液晶模块】发布新版 DEMO 软件包,版本号为 0.14
新版DEMO软件包主要在以下几个方面进行了改进: 1.改进触摸算法,使用链表注册模式:注册触摸按键后:用户只需要处理事件(event)就行了,其他都由系统完成: 2.改进systick 和 usart ...
- Scrum会议4
组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.19 已完成内容: 1.连连看生成一关功能. 2.目前测试发现没有问题. 计划完成: 1. ...
- Mybatis resultMap空值映射问题解决
Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...
- [IT思考]技术领先对手多少算好?
坦白讲,很多做技术的公司,总是觉得技术越“牛”越好.但是,历史也曾经出现过,很多公司技术的确很棒,但是市场反响一般(待补充案例).结果可想而知. 要知道,每一个新技术,尤其是业界领先的新技术,需要不少 ...
- BKDRhash实现
参考了一些有关于哈希算法的博客,里面都有提到BKDR哈希算法,在博客:各种字符串Hash函数中有对各种hash算法进行测试,测试关于哈希冲突,以及散列的质量,得到的结果可以参考以上博文. BKDRha ...
- Flink DataSet API Programming Guide
https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html Example ...