建议在Oracle中创建复合索引的方法

问题描述 投票:0回答:2

我有一个像这样的oracle查询结构:

SELECT <SOME_COLUMNS>
FROM A a
JOIN B b ON a.A_ID = b.A_ID
JOIN C c ON b.B_ID = c.B_ID

忽略WHERE子句。

已经在A_ID,B_ID和C_ID上创建单列索引(不使用C_ID,但它是表C中的主键)。

对于上述查询,从这两种方法中创建其他索引的最佳方法是什么?

方法01

  • 为b.A_ID(外键)创建单个索引
  • 为c.B_ID创建单个索引(外键)

方法02

  • 为a.A_ID和b.A_ID创建复合索引
  • 为b.B_ID和c.B_ID创建复合索引

希望这也有助于其他人。

oracle oracle11g oracle10g database-indexes
2个回答
2
投票

您只能在单个表中创建复合索引。

所以你建议:

为a.A_ID和b.A_ID创建复合索引 为b.B_ID和c.B_ID创建复合索引

这是不可能的。

在您的情况下,列a.A_ID,b.A_ID,c.A_ID上的单列索引就可以了。


1
投票

在这两种方法中,它将是01。

方法02无论如何都不会起作用;你不能创建一个包含两个表(ab)列的索引。

此外,根据您使用的数据库版本,应该对外键列进行索引,否则可能会发生锁定(您会想知道发生了什么 - 缺少索引)。

© www.soinside.com 2019 - 2024. All rights reserved.