首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle如何处理复合索引查找?

Oracle如何处理复合索引查找?
EN

Database Administration用户
提问于 2011-10-05 14:50:04
回答 2查看 2K关注 0票数 3

MySQL不能在查找中使用复合索引,在查找中,WHERE条件不包括构成最左边前缀的列:

如果列没有形成索引的最左边前缀,则MySQL无法使用索引执行查找。

这个答案在PostgreSQL上的一句话引起了我的注意:

这在Oracle 11中有些不同,它有时也可以使用不在索引定义开头的列。

在什么情况下,Oracle (至少在11g中)可以在没有查询中存在的最左边前缀列的情况下进行查找?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2011-10-05 18:04:42

粗略地说,国会预算办公室可以选择:

  1. 为“缺失”的前导列建立一个所有可能值的列表(这可以从索引结构本身相当有效地完成)
  2. 迭代地对缺失列和提供的列的每个组合执行范围扫描。
  3. 将整个结果集中在一个结果集中。

在Oracle术语中,这就是所谓的“跳过扫描”。当步骤(1)中的可能值的数量相对较小时,跳过扫描的效果最好(与索引的大小相比,这是很小的)。

在什么情况下,Oracle (至少在11g中)可以在没有查询中存在的最左边前缀列的情况下进行查找?

Oracle将使用统计数据对步骤(1)的基数进行估计,然后再进行权衡,如果执行这么多的范围扫描将不仅仅是按顺序扫描整个索引。

票数 5
EN

Database Administration用户

发布于 2011-10-05 15:23:49

在Oracle中,我们有一个叫做索引跳过扫描的特性,即使在WHERE条件下没有指定索引的前导(最左边)部分,也可以从复合索引中受益。这是一个9i新特性,记录在这里:http://download.oracle.com/docs/cd/B10501_01/server.920/a96533/optimops.htm

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

https://dba.stackexchange.com/questions/6539

复制
相关文章

相似问题

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