两个sql差别不大,执行计划走的是同样的索引,可是cost差别却很大,请大神帮忙看看两个sql从底层而言,到底差别在哪?
5M


我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
6条回答
默认
最新
语句1中where条件card.jizrq列上有表达式,语句2上没有,这点不同就产生很大的区别。
语句1在走索引之后还需要进一步通过trucate(card.jizrq)来获取数据,而语句2直接可以通过索引获取全部数据,自然cost也会小很多。
评论
有用 0主要是我看到两个sql走的是同一个执行计划,只有cost不同,不明白oracle的底层究竟是怎么执行的
评论
有用 0语句一问题应该是出在这个 trunc()函数上,索引列带函数会导致走不了索引.
这两个语句虽然都走了这个索引,但语句二用到了两个字段(orgunit,jizrq),语句一只用到了(orgunit)字段,这样导致索引选择条件会差许多,从而多取出了特别多的行而后又要过滤掉,cost自然会大的多。
更多细节可以做个10053事件看下优化器分析过程。
评论
有用 0感谢,还有个问题,我在这张表上建了一个索引,可是执行计划并没有走这个索引,这是一为什么?
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

