暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 为什么在综合指数的第二种情况下使用INSTR比IN更有效?

askTom 2017-03-22
479

问题描述

嗨,汤姆!

我有大表my_table带有类似的列(my_date date, my_state varchar2(20))。
按综合指数索引的表:create index idx_my_index on my_table(my_date, my_state)

请告诉我,为什么用INmy_state(按计划中的成本计算) 比使用INSTR对于此用例:

--slow
select * from my_table
where my_date >= sysdate-1 and my_date < sysdate
  and my_state IN ('STATE_A','STATE_B')
复制


--fast
select * from my_table
where my_date >= sysdate-1 and my_date < sysdate
  and INSTR(';STATE_A;STATE_B;',';'||my_state||';') != 0
复制


非常感谢!

专家解答

使用instr也是如此actually更快,还是只是成本更高?

如果是后者,请记住成本是一个估计。成本较高的查询仍然可以比成本较低的查询更快!

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9534189900346120939

如果instr在运行查询时比它明显更好,我会感到惊讶。

在任何情况下,为了帮助我们回答这个问题,我们需要一个完整的测试用例。除了您提供的表数据,我们还需要:

-为数据插入到
-您查询的执行计划

https://blogs.oracle.com/sql/entry/how_to_create_an_execution

把这些发给我们,我们会看看发生了什么。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论