优化Oracle查询,多个连接表

时间:2016-03-22 19:48:02

标签: sql oracle query-optimization

我正在尝试优化对Oracle数据库的一些请求。我想知道在运行请求时是否应该使用索引,聚簇索引,集群,散列簇或简单提示。

有问题的请求如下:

SELECT COUNT(*) FROM T1, T2, T3 
WHERE T1.col1 = T3.col11 AND T2.COL1 = T3.COL12 AND T1.col2 = 1;

表T1和T2中有1,000,000个项目,T3中有10,000个项目。

我尝试使用聚簇索引,但它似乎有效,但我不确定它是否是最优化的方法。

欢迎任何帮助!

谢谢:)

修改

我无法修改请求。它需要保持不变。

1 个答案:

答案 0 :(得分:1)

首先,我建议您将查询编写为一系列显式JOIN。通常,您应该使用显式JOIN并避免在FROM子句中使用逗号:

SELECT COUNT(*)
FROM T1 JOIN
     T3
     ON T1.col1 = T3.col11 JOIN
     T2
     ON T2.COL1 = T3.COL12
WHERE T1.col2 = 1;

对于此查询,您需要以下索引:T1(col2, col1)T3(col11, col12)T2(col1)

通常,聚簇索引会略微提升性能(特别是T1上的索引,在本例中)。但是,更重要的收获来自于使用索引。