1

テーブル内の 2 つの列に対して部分検索を実装する最良の方法を確認しようとしています。目的は、この検索をできるだけ迅速に実行することです。

私たちの問題は、データベースが SQL Azure でホストされていることです。FullTextIndexing をサポートしていません。CHARINDEX()これは、SQL で使用できるネイティブ コマンドはとだけであることを意味しますLIKE '% %'

純粋な T-SQL で実行する場合のクエリの構造は次のようになります。

DECLARE @SearchTerm VarChar(255) = 'Luke'

SELECT  AU.UserID,
        AU.FirstName,
        AU.Surname
FROM dbo.Users AU
WHERE AU.FirstName LIKE '%'+@SearchTerm+'%'
OR AU.Surname LIKE '%'+@SearchTerm+'%'

また、Lucene を使用する機能も利用できます。既に Windows Azure の Worker ロールにセットアップしていますが、データベース内と Lucene 内の両方でデータの整合性を維持する必要があります。

私が知りたいのは:

  1. LIKE上記で使用しているものよりも T-SQL で検索を実行するためのより良い方法はありますか
  2. 姓と名の両方を含むテーブルに計算列を追加すると、クエリのパフォーマンスが向上しますか?
  3. あるいは; Lucene に移動する場合。読み取りパフォーマンスは、上記のクエリよりもはるかに優れていますか? (これに関して、現在dbo.Usersテーブルには10,000行未満があります)
  4. ドアを開け放します。ロード全体を簡単にするために、まだ検討していない方法はありますか?
4

1 に答える 1

2

名と名前の両方を含む計算列を追加すると、結果に名前と名前の両方が含まれるようになりますが、上記のSQLは、名前または名前のいずれかを照合するためのものです。

名と姓を一致させたい場合は、データベースプログラマーが適用できるトリックがあるため、計算列の方が高速になる可能性があります(例:ボイヤームーア文字列検索。パターンサイズが大きくなると高速になります)。

Luceneでの私の経験では、どのデータベース検索よりも大幅に高速です。日常のハードウェアでこれほど高速なものはありません。しかし、あなたが言うように、Luceneインデックスをデータベースと同期させておく必要があります。

于 2012-05-02T10:30:19.700 に答える