2

これは私の前のクエリの続きです

DDL

CREATE TABLE [dbo].[t](
    [words] [varchar](1000) NULL,
    [id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

DML

insert into t(words)values('this is my laptop')
insert into t(words)values('this does not contains heqadphone')

これらの 2 つの挿入は 250 回繰り返されます...

SQL クエリ - 1

SELECT * FROM 
t as t
JOIN CONTAINSTABLE(t, words,'"*heqadphone"') fulltextSearch
ON
t.[Id] = fulltextSearch.[KEY]

SQL クエリ - 2

Select * from t where words like '%heqadphone%'

混乱

通常、後のクエリで述べたように、二重の %% を使用しないことをお勧めします。しかし、SQLプロファイラーの読み取りと期間を確認した後

クエリ 1 は、より多くの read/duration を示しています。下のリンクをクリックすると詳細が表示されます

クエリの SQL プロファイラの読み取りと期間 - 1

クエリ 2 は、より少ない読み取り/期間を示しています。下のリンクをクリックすると詳細が表示されます

クエリの SQL プロファイラの読み取りと期間 - 2

確認していただけますか。理想的には、どのクエリを使用するとよいでしょうか?

4

3 に答える 3

5

異なる機能を持つ 2 つの異なる機能を比較しています:CONTAINSTABLEランキングなどの追加情報を提供しますLIKE。最初の質問は、実際にフルテキスト機能が必要かどうかです。その場合、選択の余地はありません。使用する必要がありますCONTAINSTABLE

一方、FTS 機能は必要ないが、列内の 1 つの単語を検索する最速の方法が必要な場合は、実際のデータ セットで両方のオプションをテストして確認するのが最善の方法です。どちらがあなたの環境でより良いパフォーマンスを発揮するか. パフォーマンスが向上する場合LIKEは使用できますが、erikallen が述べたように、本番環境と同じ量のデータでテストするようにしてください。

于 2012-08-17T16:03:14.790 に答える
1

どのくらいのデータがありますか。250行ある場合、遅くならずにほとんど何でもできます。それが本番データの量である場合は、好きなことをしてください。そうでない場合は、本番システムにあると予想されるデータ量でテストを実行してください。

于 2012-08-16T23:40:01.310 に答える
0

パフォーマンスの測定/分析には、行だけでなく、はるかに多くのデータが必要だと思い250*2 = 500ます。100,000レコードの範囲内のデータをテストする必要があります

于 2012-08-22T13:20:20.160 に答える