9

これは以前にサイトで質問されたと思いますが、見つかりません。

いくつかのサイトで、検索結果にあいまいなカウントがあるのを見たことがあります。たとえば、ここでstackoverflowで質問を検索すると、+5000件の結果が表示され(場合によっては)、Gmailでキーワードで検索すると「数百件」と表示され、Googleでは約X件の結果が表示されます。これは、ユーザーにわかりやすい巨大な数字を表示するための単なる方法ですか? それとも、これは実際にデータベースで使用できる結果をカウントするための高速な方法です [私は現在 10g バージョンで Oracle を学習しています]? 「1,000 件以上の結果が得られたら、やめて、1,000 件以上あると教えてください」のようなものです。

ありがとう

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

これがどれだけ速く実行されるかはわかりませんが、試すことができます:

SELECT NULL FROM your_tables WHERE your_condition AND ROWNUM <= 1001

結果の行数が 1001 に等しい場合、レコードの合計数は > 1000 になります。

于 2012-05-03T15:27:54.630 に答える
1

漠然としたカウントは、すぐに表示されるバッファーです。ユーザーがさらに結果を見たい場合は、さらに要求できます。

これはパフォーマンス機能であり、結果を表示した後、Google などのサイトはより多くの結果を検索し続けます。

于 2012-05-03T15:29:57.217 に答える
0

SQLクエリを実行すると、

 LIMIT 0, 100

たとえば、最初の100の答えしか得られません。そのため、視聴者に、リクエストに対する100以上の回答があることを印刷できます。

グーグルの場合、リクエストに対する回答が27'000'000'000を超えていることを彼らが本当に知っているかどうかはわかりませんが、彼らは本当に知っていると思います。結果が保存され、更新がバックグラウンドで実行される標準的なリクエストがいくつかあります。

于 2012-05-03T15:31:46.590 に答える