1

私が探しているのは、コストのかかる呼び出しになる可能性がある実際の数ではなく、行数の推定値を返すことです。あなたがグーグル検索で見るものと同様です(1.000行の...)。

このためのすぐに使えるソリューションはありますか?そうでない場合、一般的なアプローチは何ですか?

SQLServer2008データベースにクエリを実行しています。

編集:明確にするために、結果の数は特定のユーザークエリに関連しています。たとえば、ユーザーが「John」を検索すると、結果は「Johnに一致する行が約1.280.000行あります」になります。

4

6 に答える 6

5

既存の提案にワイルドカードを追加するだけです...

統計がかなり最新の場合、考えられるアイデアの 1 つは、呼び出し元のコードから推定実行計画を分析することです (したがって、ここでの制限は、XML を受信して​​分析するために SQL の外部のコードが含まれることです)。

例えば

SET SHOWPLAN_XML ON;
SELECT Something
FROM MyTable
WHERE SomeField = 'ABC123'

次に、返された XML をチェックして、「EstimateRows」値を引き出します。

于 2010-11-02T13:20:40.230 に答える
1

これは、TSQL内から使用できる完全に異なる回答であるため、他の回答とは別に....

もう 1 つの可能性は、TABLESAMPLE句を使用して、指定された数 (またはパーセンテージ) のデータ ページのみを調べ、それを乗算することです。

例えば

SELECT COUNT(*)
FROM MyTable TABLESAMPLE(50 PERCENT)
WHERE SomeField = 'ABC123'

サンプルサイズを微調整する必要があります。非常に役立つ可能性があるため、 BOL リファレンスをよく読むことをお勧めします。

于 2010-11-02T13:40:45.413 に答える
1

あなたが何を求めているかを伝えるのは難しいです。検索アルゴリズムから数値を返すことについて話している場合は、入力からハッシュを計算し、そのハッシュを使用して、定期的に維持するカウントに対してマップすることができます。ハッシュがどれだけ優れているか、およびカウントを更新する頻度に応じて、「ほぼ」適切な結果が得られる場合があります。

于 2010-11-02T13:07:01.397 に答える
1

上記の私のコメントをご覧ください。ただし、カウント操作が特に高価であることがわかっている場合は、次を使用して行数を概算する方法があるようです。

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('sometable') AND indid < 2

これは、次の場所にある以前の投稿から取得したものです。

count(*) は本当に高価ですか?

于 2010-11-02T13:07:43.750 に答える
1

一般的なアプローチは、行のランダムなサンプルを取得して、実際にいくつあるかを推定することです。たとえば、ID が UUID の場合、select ステートメントでフィルターを実行して、ランダムなサンプルを作成できます。そのため、「f」で始まる ID を持つ行を見ることができます。次に、カウントに 16 を掛けて、行カウントの見積もりを取得します。ただし、これを高速にするには、インデックスを作成する必要があります。

于 2010-11-02T13:09:49.810 に答える
0

Vlejkoz さん、今後のアップデートに基づいて、現在の高価なテーブル ルックアップと結合ではなく、一般的なテキスト検索アルゴリズムを探しているようです。

SQL Server には、まさにこのための完全なフレームワークがあります。これは Microsoft フル テキスト検索と呼ばれ、追加のクエリ機能を提供します。これにより、従来のあいまいなスタイルの Google 検索にはるかに似た検索構文が提供されますが、特定のデータベース テーブルに合わせて調整されます。

このトピックには多くのことがありますので、あなたの質問と同様の要件を満たしていると思われるこの紹介記事をご覧ください。

Microsoft 全文検索の記事

于 2010-11-02T13:23:47.137 に答える