【发布时间】:2017-05-16 15:59:09
【问题描述】:
我在(SWcode,cdcardno)上创建了一个索引
然后我运行这个查询:
SELECT cd.*
FROM KS cd
where cd.cdcardno in ('6219862012953805')
ORDER BY cd.ROWID
and oracle 使用索引跳过扫描,这是真的。但是当我运行这个查询时:
SELECT cd.*
FROM KS cd
where cd.cdcardno in ('6219861009150391','6219862012953805')
ORDER BY cd.ROWID
oracle 使用全面扫描。我不明白为什么。
【问题讨论】:
-
当索引中有两个或多个字段时,oracle 可以选择跳过扫描,并且 oracle 选择“跳过”第一个或多个字段并从较低的字段“扫描”索引索引树。他们所说的直方图和数据分布是真的,但是如果您在 WHERE 子句中只选择一个字段,那么期望跳过扫描是没有意义的。
标签: performance indexing oracle11g sql-tuning