我有以下查詢查詢需要長時間
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
您使用的數據庫是? –