2014-03-04 310 views
0

我有以下查询查询需要长时间

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

上面的查询返回百万行和花费的时间才能返回结果很多。如何才能看到第一个“N”个记录,以便查询运行得更快。

+0

'SELECT TOP 100 * ...' –

+0

您可以使用SELECT Top n * from A .... – sunk

+1

您使用的数据库是? –

回答

-2

您可以通过TOP条款获得所需的记录数。这里有一个例子: -

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

在Oracle中,你想补充rownumwhere条款:

SELECT * 
FROM A JOIN 
    B 
    ON A.a = B.b JOIN 
    C 
    ON A.a = C.c 
WHERE rownum < 100; 
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)会破坏这提示和反正会收集整个数据集。没有它,他们根本无法工作:例如如果没有提供整个列表,如何订购数据集?

+0

'FIRST_ROWS' *提示*不会限制行,尽管它可能会使返回的第一行更快。 –

+0

是的,但我认为rownum非常清晰,问题是让它更快......无论如何,最大的回答是关于另一件事 – smnbbrv

+0

你是对的,OP的真正问题是查询的性能 - 但他们最直接的问题是如何限制行数,而且他们似乎并不熟悉ROWNUM解决方案。但是你的回答很有用,我不会降低它的效果。 –