我想之前在网站上已经提到过这个问题,但我找不到它。
我在一些网站上看到对搜索结果的模糊计数。例如,在stackoverflow中,当你搜索一个问题时,它表示+5000结果(有时候),在gmail中,当你按关键字搜索时,它表示“数百”,而在google中它表示aprox X结果。这只是向用户展示一个易于理解的巨大数字吗?或者这实际上是一种快速计算可以在数据库中使用的结果的方法[我现在正在学习Oracle 10g版本]?比如“嘿,如果你获得超过1k的结果,就停下来告诉我有超过1k的结果”。
由于
PS。我是数据库的新手。
答案 0 :(得分:3)
通常这只是一种显示数字的好方法。
我不相信有一种方法可以在SQL中执行您所要求的操作 - 计数没有可用于计算直到某个数字的选项。
我也不会认为这是来自gmail或stackoverflow中的SQL。 大多数搜索引擎会向搜索返回总匹配数,然后让您翻阅结果。
至于使一个确切的数字更具人性可读性,这里是Rails的一个例子:
http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_human
答案 1 :(得分: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_row
和max_row
替换为有意义的值。但请注意,如果不使用UNIQUE SCAN
或对索引进行相对较窄的RANGE SCAN
操作进行过滤,则计算精确行数可能会很昂贵。在此处详细了解:Speed of paged queries in Oracle
正如其他人所说的那样,您可以始终使用5000
过滤器对您的查询设置绝对上限,例如ROWNUM <= 5000
,然后只需指出结果超过5000+
。请注意,在应用ROWNUM
过滤时,Oracle可以非常擅长优化查询。在这里找到关于该主题的一些信息:
http://www.dba-oracle.com/t_sql_tuning_rownum_equals_one.htm
答案 2 :(得分:1)
我不知道这会有多快,但你可以试试:
SELECT NULL FROM your_tables WHERE your_condition AND ROWNUM <= 1001
如果结果中的行数等于1001,那么记录的总数将> 1000。
答案 3 :(得分:1)
模糊计数是一个将立即显示的缓冲区。如果用户想要查看更多结果,那么他可以请求更多。
这是一个表演设施,在显示结果后,谷歌等网站不断搜索更多结果。
答案 4 :(得分:1)
this question提供了一些非常好的信息
答案 5 :(得分:0)
执行SQL查询时,可以设置
LIMIT 0, 100
例如,你只能获得前100个答案。这样您就可以向观众打印出他们的请求有100多个答案。
对谷歌来说,我不能说他们是否真的知道有超过27'000'000'000的答案,但我相信他们确实知道。有一些标准请求存储了结果,并且更新是在后台完成的。