码迷,mamicode.com
首页 > 数据库 > 详细

oracle 表字段类型,与业务SQL不合理,导致的隐式转换

时间:2019-06-18 12:09:31      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:isp   har   没有   索引   查询   页面   select   display   set   

今天遇到一个生产问题,业务SQL很简单,单表查询,而且表只有三个字段,有个主键ID,而且通过主键ID过滤,业务页面会传一百多个ID过来调用SQL,这个表数据量大小为100多万,但是偏偏这条SQL执行跑了15秒,完全影响业务不能使用。

select a,b,c from t where t.id in (1111,222,333,444,555..........)

我一开始并没有去查看表设计,而是直接看了执行计划,

1 alter session set statistics_level=all;
2 执行SQL
3 select * from table(dbms_xplan.display_cursor(null,null,‘ALLSTATS LAST‘)

执行计划直接走了全表扫描,而在谓词过滤的信息里有一堆的

to_number(t.id)=1111 or to_number(t.id)=2222 ..............

看到这里立马就猜想到了具体的问题所在,查询T表ID字段,是VARCHAR2类型,而SQL in的是数字类型,SQL直接被隐式转换后,便走不了索引了, 直接走了全表。这个问题后续才发现,也是因为业务不关注,在表数据日益上涨之后,性能问题日益凸显才被抛出来

oracle 表字段类型,与业务SQL不合理,导致的隐式转换

标签:isp   har   没有   索引   查询   页面   select   display   set   

原文地址:https://blog.51cto.com/2012ivan/2410375

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!