我有以下查询查询需要长时间
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”个记录,以便查询运行得更快。
您可以通过TOP条款获得所需的记录数。这里有一个例子: -
SELECT TOP n *
FROM A
JOIN B ON A.a=B.b
JOIN C ON A.a=C.C
在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
)会破坏这提示和反正会收集整个数据集。没有它,他们根本无法工作:例如如果没有提供整个列表,如何订购数据集?
'FIRST_ROWS' *提示*不会限制行,尽管它可能会使返回的第一行更快。 –
是的,但我认为rownum非常清晰,问题是让它更快......无论如何,最大的回答是关于另一件事 – smnbbrv
你是对的,OP的真正问题是查询的性能 - 但他们最直接的问题是如何限制行数,而且他们似乎并不熟悉ROWNUM解决方案。但是你的回答很有用,我不会降低它的效果。 –
'SELECT TOP 100 * ...' –
您可以使用SELECT Top n * from A .... – sunk
您使用的数据库是? –