我在(SWcode,cdcardno)
我运行此查询:
SELECT cd.*
FROM KS cd
where cd.cdcardno in ('6219862012953805')
ORDER BY cd.ROWID
和oracle使用索引跳过扫描,这是真的。但是当我运行这个查询时:
SELECT cd.*
FROM KS cd
where cd.cdcardno in ('6219861009150391','6219862012953805')
ORDER BY cd.ROWID
oracle使用全扫描。我不明白为什么。
答案 0 :(得分:0)
有时甲骨文在两个执行计划之间抨击,当其中一个是坏的而另一个更糟糕的时候。创建一个索引,其中cdcardno
位于列表中的第一个位置。或者只是翻转当前索引中列的顺序。
答案 1 :(得分:0)
优化器将根据成本生成执行计划。而这又基于统计数据。除非您提供一些诊断数据,例如SQL监视器报告,否则您将收到的答案将是猜测。