select count(*)比oracle中的select(*)花费更多的时间

时间:2015-10-26 08:03:47

标签: sql oracle toad

我有一个流水线功能。我有两个sql语句如下。 第一个是从表中选择* 第二个是表中的选择计数(*)。

SELECT *
  FROM table (es_feed_api_da.invoice_daily ('10-sep-2014'));

SELECT count(*)
 FROM table (es_feed_api_da.invoice_daily ('10-sep-2014'));

我在toad中运行两个查询。 我发现第二个(选择计数(*))比第一个花费相对更多的时间(选择*) 有人可以向我解释原因.. 感谢

1 个答案:

答案 0 :(得分:6)

  

我在toad中运行两个查询

     

我发现第二个(选择计数(*))比第一个花费相对更多的时间(选择*)有人可以向我解释原因。

很明显,SELECT *会比SELECT COUNT(*)更快,因为您在 TOAD 上执行它,这是一个基于GUI的客户端工具只需投影/选择行时,只提供前几行(例如SQL Developer中只有50 rows)。通过向下滚动查询结果获取更多行时,经过的时间会不断增加。

另一方面,当你执行SELECT COUNT(*)时,它必须计算表中的所有行,而不是SELECT *,它只返回TOAD中的前几行。

我没有TOAD,但我可以在SQL Developer中演示这种行为。

输出SELECT * 仅前50行

enter image description here

向下滚动到500行后:

enter image description here

当您进一步向下滚动时,获取更多行所需的时间将会增加。