我有以下查询
SELECT * FROM A JOIN B ON A.a=B.b JOIN C ON A.a=C.c.
上面的查询返回百万行,并且需要花费大量时间来返回结果。如何才能看到第一个“N”记录,以便查询运行得更快。
答案 0 :(得分:2)
在Oracle中,您只需将rownum
添加到where
子句:
SELECT *
FROM A JOIN
B
ON A.a = B.b JOIN
C
ON A.a = C.c
WHERE rownum < 100;
答案 1 :(得分:1)
您可以使用提示first_rows:
SELECT /*+ FIRST_ROWS(100) */ * FROM A JOIN B ON A.a=B.b JOIN C ON A.a=C.c
同时检查你是否有A.a,B.b和C.c的索引。
作为补充,您应该了解任何排序(order by
),或分析函数,或group by
操作,或distinct
(可能是其他内容请求整个数据集的井,例如UNION
或INTERSECT
)将破坏此提示,并且无论如何将收集整个数据集。没有它,他们根本无法工作:例如如果没有提供整个列表,如何订购数据集?
答案 2 :(得分:-2)
您可以使用TOP子句获得所需的记录数。这是一个例子: -
SELECT TOP n *
FROM A
JOIN B ON A.a=B.b
JOIN C ON A.a=C.C