我有一个像这样的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
方法02
希望这对其他人也有帮助。
答案 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仍然无法正常工作;您无法创建包含两个表(a
和b
)中的列的索引。
此外,根据所使用的数据库版本,应该对外键列进行索引,否则可能会发生锁定(并且您会想知道正在发生什么-缺少索引正在发生)。