其中rownum = 1查询在Oracle中占用时间
我正在尝试执行类似的查询
select * from tableName where rownum=1
这个查询基本上是为了获取表的列名。表中有超过百万条记录。当我把上面的条件花了这么多时间来获取第一行时。是否有任何替代来获取第一行。
没有找到相关结果
已邀请:
6 个回复
驮帽俺篮号
有一些奇怪的ROWNUM错误,有时稍微改变查询会修复它。我以前见过这种情况,但我无法重现它。 以下是对类似问题的一些讨论:http://jonathanlewis.wordpress.com/2008/03/09/cursor_sharing/和http://forums.oracle.com/forums/thread.jspa?threadID=946740&tstart=1
渴翅吮斡撤
正如您所看到的,一致获取的数量非常高(对于单行)。在某些情况下可能会遇到这种情况,例如,您插入带有
提示的行(因此高于高水位线),并且您还会定期删除最旧的行,从而在段的开头处产生大量空白空间。
爆山
表? 并且,在快速网络搜索之后,情况似乎如此:请参阅
。 我会使用那些而不是去实际的表,像(未经测试):
如果您一心想找出查询速度慢的原因,那么您应该恢复标准方法:让您的DBMS为您解释查询的执行计划。对于Oracle,请参阅本文档的第9节。 在
上有一个对话似乎表明行号是在选择阶段之后创建的,这可能意味着查询无论如何都要检索所有行。
可能有助于确定这一点。如果它包含
而不是
,那么这可以解释性能。 除此之外,我对Oracle细节的了解也在减少,你将不得不进一步分析
。
芯伶句餐绕
第一行,尤其是与ROWNUM相关的行,由Oracle任意决定。除非您提供ORDER BY子句,否则从查询到查询可能不一样。 因此,选择要过滤的主键值与获取单行的方法一样好。
屡倒雷图
诉嘎归亮
有了这个: