我正在尝试优化对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个项目。
我尝试使用聚簇索引,但它似乎有效,但我不确定它是否是最优化的方法。
欢迎任何帮助!
谢谢:)
修改
我无法修改请求。它需要保持不变。
答案 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
上的索引,在本例中)。但是,更重要的收获来自于使用索引。