请问大家在什么情况下使用组合索引?

huangxueliang_2008 2009-12-26 09:02:39
请问大家在什么情况下使用组合索引?
在组合索引的情况下,我查询的时候只用组合索引的其中一个字段,请问这种情况下会走索引吗?
...全文
789 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
etsilence 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 budong0000 的回复:]
mark
另如果col1,col2,col3都建有独立index, 那么组合查询 col1 = xx and col2 = yy , 那么独立索引和组合索引 哪个更合适呢?
[/Quote]

应该是组合索引更好点,维护成本低。

另外7楼所说的索引跳跃扫描 的执行条件是 所要查询的字段全部已经建立在索引中才行,而且索引跳跃扫描的成本比其他索引扫描方式要更低。
budong0000 2010-05-07
  • 打赏
  • 举报
回复
daydayup
budong0000 2010-05-07
  • 打赏
  • 举报
回复
补充下, 数据量150w , sql server08
budong0000 2010-05-07
  • 打赏
  • 举报
回复
mark
另如果col1,col2,col3都建有独立index, 那么组合查询 col1 = xx and col2 = yy , 那么独立索引和组合索引 哪个更合适呢?
小灰狼W 2009-12-28
  • 打赏
  • 举报
回复
只要数据库版本不过低,不需要在where 条件中加上前导列。
是否走索引由cbo根据成本估算来决定。一般在查询经常需要几个列的条件时对这几个字段加组合索引

[Quote=引用 :]
在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引。在组合索引的使用方面,Oracle有以下特点:



1、 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的where子句中时,才会使用到该索引;


2、 在使用Oracle9i之前的基于成本的优化器(CBO)时, 只有当组合索引的前导列出现在SQL语句的where子句中时,才可能会使用到该索引,这取决于优化器计算的使用索引的成本和使用全表扫描的成本,Oracle会自动选择成本低的访问路径;


3、 从Oracle9i起,Oracle引入了一种新的索引扫描方式——索引跳跃扫描(index skip scan),这种扫描方式只有基于成本的优化器(CBO)才能使用。这样,当SQL语句的where子句中即使没有组合索引的前导列,并且索引跳跃扫描的成本低于其他扫描方式的成本时,Oracle就会使用该方式扫描组合索引

[/Quote]
碧水幽幽泉 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]
huangxueliang_2008 (huangxueliang_2008)
  '截至2009-12-26 21:02:39  用户结帖率0.00%


[/Quote]
studying_ 2009-12-27
  • 打赏
  • 举报
回复
不及时结贴不是好习惯。

1、请问大家在什么情况下使用组合索引?
==>出现复合属性的时候。

2、在组合索引的情况下,我查询的时候只用组合索引的其中一个字段,请问这种情况下会走索引吗?
==>组合索引的第一个字段是引导列,只有他被引用的时候索引才会走
BenChiM888 2009-12-26
  • 打赏
  • 举报
回复
不及时结贴不是好习惯。

1、请问大家在什么情况下使用组合索引?
==>出现复合属性的时候。

2、在组合索引的情况下,我查询的时候只用组合索引的其中一个字段,请问这种情况下会走索引吗?
==>组合索引的第一个字段是引导列,只有他被引用的时候索引才会走

crazylaa 2009-12-26
  • 打赏
  • 举报
回复
记得group by,order by 多个字段会用到多个字段的联合索引
ACMAIN_CHM 2009-12-26
  • 打赏
  • 举报
回复
huangxueliang_2008 (huangxueliang_2008)
'截至2009-12-26 21:02:39 用户结帖率0.00%

ACMAIN_CHM 2009-12-26
  • 打赏
  • 举报
回复
假设你有索引 idx1 (col1,col2,col3)

如果你基于 where col1=123; 则考虑使用这个索引。
如果你 where col2=456 则无法使用这个索引。

如果你经常进行 where col1=123 and col2=456 的时候,考虑创建这个复合索引。


17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧