每个查询在我的桌子上花了很多时间,这是非常大的。出于测试目的,我希望对表的前几行实现查询。例如:在选择*来自ROWNUM = 1的表中,将检查所有行,即ROWNUM是否为1。但我想测试我的查询几行只是为了节省时间。
答案 0 :(得分:4)
如果您只想选择top nown,那么您必须使用 -
SELECT *
FROM TABLE
WHERE ROWNUM <= N;
答案 1 :(得分:0)
rownum是一个伪列,它不存在于表记录中,并且在查询的谓词(where子句)阶段完成后在运行时分配。因此,只有第一个查询返回结果
select * from hr.employees where employee_id >190 and rownum<2;-- Will return one row
select * from hr.employees where employee_id >190 and rownum>2;-- Won't return any resultset
select * from hr.employees where employee_id >190 and rownum=3;-- Won't return any resultset
最后两个不返回结果集的查询背后的原因是谓词(employee_id&gt; 190)完成并且rownum分配给第一行然后for(2 query rownum&gt; 2)1&gt; 2返回false并且for(3 query rownum = 3)1 = 3返回false,因此不返回任何数据。
由于 安迪
答案 2 :(得分:0)
如何为测试查询创建一个迷你测试表?
create table my_test_table as select * from big_table where rownum <= n;
现在你可以运行像
这样的东西select count(*) from my_test_table where color='red';
并将结果除以n
,以便估算大数据库中行数的哪一部分color='red'
。当然,请注意,你可能真的很不走运(即你的小桌子可能是整个表格总数的一个不好的样本),在这种情况下,你可以增加n
来获得更好的样本。
如果您不能或不愿意创建新表,您当然可以使用嵌套查询:
select * from (select * from big_table where rownum <= n)
where <condition>;