2014-03-04 309 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解決方案。但是你的回答很有用,我不會降低它的效果。 –