首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle指数回升

Oracle指数回升
EN

Stack Overflow用户
提问于 2015-06-01 23:32:17
回答 1查看 121关注 0票数 0

全,

在下面的场景中,我在Oracle中遇到了一个特殊的问题。

代码语言:javascript
运行
复制
View A - Column 1 - 5
Table B - Column 1, 2, 6-10 (Has millions of Rows)

视图A和表B之间的公共列是列1和列2。

表B在第1,2列上有索引。

查询是这样的

代码语言:javascript
运行
复制
SELECT vw.column3, vw.column4, vw.column5, tbl.column2, tbl.column6... tbl.column10
  from viewA vw
  join tableB tbl
    on tbl.column1 = vw.column1
       and tbl.column2 = vw.column2

虽然我连接的是表上可用的索引,但查询是在表上执行完全扫描,而不是索引扫描。请帮助理解这个问题。

表已分析,没有直方图,还尝试通过在查询中指定索引来进行提示。

EN

回答 1

Stack Overflow用户

发布于 2015-06-02 01:02:38

Oracle是否应该使用索引取决于许多因素。

i)索引旨在提供平均的log(n)行为。它通过保持索引排序,然后应用binary search (它实际上使用了一个tree structure,其中节点包含一些数据子集,但为了便于理解,让我们继续使用它)来实现这一点。所以,从本质上讲,对分搜索是导致log(n)时间的搜索,但是应该有一些东西可以搜索。在本例中,where子句中没有指定任何内容,那么它应该搜索什么呢?它将不得不读取整个索引,并最终读取整个表。您可以尝试提供hint,但是它可能会增加查询时间,并且您很容易理解为什么Oracle没有使用您的索引。

ii)数据的Cardinality (Selectivity),但我认为这不是问题所在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30577462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档