查询需要很长时间

时间:2014-03-04 15:55:03

标签: sql performance oracle rownum

我有以下查询

 SELECT * FROM A JOIN B ON A.a=B.b JOIN C ON A.a=C.c.

上面的查询返回百万行,并且需要花费大量时间来返回结果。如何才能看到第一个“N”记录,以便查询运行得更快。

3 个答案:

答案 0 :(得分:2)

在Oracle中,您只需将rownum添加到where子句:

SELECT *
FROM A JOIN
     B
     ON A.a = B.b JOIN
     C
     ON A.a = C.c
WHERE rownum < 100;

答案 1 :(得分:1)

您可以使用提示first_rows

SELECT /*+ FIRST_ROWS(100) */ * FROM A JOIN B ON A.a=B.b JOIN C ON A.a=C.c

同时检查你是否有A.a,B.b和C.c的索引。

作为补充,您应该了解任何排序(order by),或分析函数,或group by操作,或distinct(可能是其他内容请求整个数据集的井,例如UNIONINTERSECT)将破坏此提示,并且无论如何将收集整个数据集。没有它,他们根本无法工作:例如如果没有提供整个列表,如何订购数据集?

答案 2 :(得分:-2)

您可以使用TOP子句获得所需的记录数。这是一个例子: -

SELECT TOP n *
FROM A
JOIN B ON A.a=B.b 
JOIN C ON A.a=C.C