0

我有以下查询

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

上面的查询返回数百万行并且需要大量时间来返回结果。我怎样才能看到前“N”条记录,以便查询运行得更快。

4

3 回答 3

2

在 Oracle 中,您只需rownumwhere子句中添加:

SELECT *
FROM A JOIN
     B
     ON A.a = B.b JOIN
     C
     ON A.a = C.c
WHERE rownum < 100;
于 2014-03-04T16:26:11.497 回答
1

您可以使用提示first_rows

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

还要检查你是否有关于 Aa、Bb 和 Cc 的索引

作为补充,您应该了解任何排序(order by)或分析函数或group by操作,或distinct(可能还有其他需要整个数据集的东西,例如UNIONINTERSECT)都会破坏这个提示,并且无论如何都会收集整个数据集。没有它他们根本无法工作:例如,如果没有提供整个列表,如何对数据集进行排序?

于 2014-03-04T16:38:02.910 回答
-2

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

SELECT TOP n *
FROM A
JOIN B ON A.a=B.b 
JOIN C ON A.a=C.C
于 2014-03-04T15:58:39.847 回答