我有以下查询
SELECT * FROM A JOIN B ON A.a=B.b JOIN C ON A.a=C.c.
上面的查询返回数百万行并且需要大量时间来返回结果。我怎样才能看到前“N”条记录,以便查询运行得更快。
我有以下查询
SELECT * FROM A JOIN B ON A.a=B.b JOIN C ON A.a=C.c.
上面的查询返回数百万行并且需要大量时间来返回结果。我怎样才能看到前“N”条记录,以便查询运行得更快。
在 Oracle 中,您只需rownum
在where
子句中添加:
SELECT *
FROM A JOIN
B
ON A.a = B.b JOIN
C
ON A.a = C.c
WHERE rownum < 100;
您可以使用提示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
(可能还有其他需要整个数据集的东西,例如UNION
或INTERSECT
)都会破坏这个提示,并且无论如何都会收集整个数据集。没有它他们根本无法工作:例如,如果没有提供整个列表,如何对数据集进行排序?
您可以使用 TOP 子句获得所需的记录数。这是一个例子:-
SELECT TOP n *
FROM A
JOIN B ON A.a=B.b
JOIN C ON A.a=C.C