9

我想这已经在网站上问过,但我找不到它。

我在一些网站上看到搜索结果的计数含糊不清。例如,在 stackoverflow 中,当您搜索问题时,它会显示 +5000 个结果(有时),在 gmail 中,当您按关键字搜索时,它会显示“数百个”,而在 google 中会显示 aprox X 结果。这只是向用户展示一个易于理解的巨大数字的一种方式吗?或者这实际上是一种快速计算可以在数据库中使用的结果的方法[我目前正在学习 Oracle 10g 版本]?像“嘿,如果你得到超过 1k 个结果,请停下来告诉我有超过 1k 个”。

谢谢

PS。我是数据库新手。

4

6 回答 6

3

通常这只是显示数字的好方法。

我不相信有一种方法可以在 SQL 中执行您所要求的操作 - count 在某个数字之前没有计数选项。

我也不认为这是来自 gmail 或 stackoverflow 中的 SQL。大多数搜索引擎会返回一个搜索的匹配总数,然后让您对结果进行分页。

至于使确切的数字更易于阅读,这里有一个来自 Rails 的示例:

http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_human

于 2012-05-03T15:31:46.520 回答
2

使用 Oracle,您始终可以使用分析函数来计算即将返回的确切行数。这是此类查询的示例:

SELECT inner.*, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
FROM (
  [... your own, sorted search query ...]
) inner

这将为您提供特定子查询的总行数。当您还想应用分页时,您可以进一步包装这些 SQL 部分:

SELECT outer.* FROM (
  SELECT * FROM (
    SELECT inner.*,ROWNUM as RNUM, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
    FROM (
      [... your own, sorted search query ...]
    ) inner
  ) 
  WHERE ROWNUM < :max_row
) outer
WHERE outer.RNUM > :min_row

用有意义的值替换min_rowmax_row。但请注意,当您不使用索引进行过滤或对索引进行相对较窄的操作时,计算确切的行数可能会很昂贵。在此处阅读有关此内容的更多信息:Oracle 中分页查询的速度UNIQUE SCANRANGE SCAN

正如其他人所说,您始终可以有一个绝对上限,例如使用过滤器5000对您的查询进行ROWNUM <= 5000筛选,然后只表明有多个5000+结果。ROWNUM请注意,当您应用过滤时,Oracle 可以非常擅长优化查询。在此处查找有关该主题的一些信息:

http://www.dba-oracle.com/t_sql_tuning_rownum_equals_one.htm

于 2012-05-03T15:39:36.467 回答
1

这个问题提供了一些很好的信息

于 2012-05-03T15:49:46.920 回答
1

Vague count 是一个缓冲区,会及时显示。如果用户想查看更多结果,那么他可以请求更多。

这是一个性能设施,在显示结果后,像谷歌这样的网站会继续搜索更多结果。

于 2012-05-03T15:29:57.217 回答
1

我不知道这将运行多快,但您可以尝试:

SELECT NULL FROM your_tables WHERE your_condition AND ROWNUM <= 1001

如果结果中的行数等于 1001,那么总记录数将 > 1000。

于 2012-05-03T15:27:54.630 回答
0

当您执行 SQL 查询时,您可以设置一个

 LIMIT 0, 100

例如,您只会得到前一百个答案。这样您就可以向您的查看器打印他们的请求有 100 多个答案。

对于谷歌,我不能说他们是否真的知道对请求的回答超过 27'000'000'000,但我相信他们确实知道。有一些标准请求存储了结果,并且在后台完成了更新。

于 2012-05-03T15:31:46.590 回答