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

时间:2019-03-21 07:36:19

标签: oracle oracle11g oracle10g database-indexes

我有一个像这样的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创建复合索引

希望这对其他人也有帮助。

2 个答案:

答案 0 :(得分:2)

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

因此,正如您所提议的:

  

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

不可能。

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

答案 1 :(得分:1)

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

方法02仍然无法正常工作;您无法创建包含两个表(ab)中的列的索引。

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