2011-01-31 2 views
10

nvarchar(1000)列に一致するテキストに基づいてレコードをフィルタリングする必要があります。 テーブルには40000以上のレコードがあり、成長しています。今のところ、私は好きな条件を使用しています: -SQL Server 2005で複数の値を持つ類似条件を使用するにはどうすればよいですか?

SELECT 
    * 
FROM 
    table_01 
WHERE 
    Text like '%A1%' 
    OR Text like '%B1%' 
    OR Text like '%C1%' 
    OR Text like '%D1%' 

好きな回避策はありますか?

+4

このような 'LIKE '%A1%'操作を使用すると、インデックスの使用が無効になり、毎回保証されたフルテーブルスキャン**が得られることがわかります。 –

答えて

0

テーブルのその列にFULLTEXT INDEXを作成することができます(これはパフォーマンスとスペースに関する多くの研究を前提としています)、テキストマッチングのパフォーマンスが大幅に向上することが予想されます。このlinkにアクセスしてFULLTEXT SEARCHが で、linkと表示され、FULLTEXT INDEXを作成する方法をご覧ください。

+0

Keep in LIKEが文字列内の文字パターンを検索している間は、フルテキスト索引付けは単語ベースであることに注意してください。具体的な例として、「仕事」の全文検索では「過労」という言葉は見つかりませんが、LIKE句があります。 –

8
SELECT 
    * 
FROM 
    table_01 
WHERE 
    Text like '%[A-Z]1%' 

テキストがA1、B1が含まれている場合、これはチェックします、C1、D1は、... Like Condition in SQL Server

+5

私はあなたがちょっとだけ文字通り与えられたサンプルコードを取ったと感じています。 –

+0

@Joe Stefanelli ...たぶん私は持っているが、言及されたすべてのOPは "好ましい回避策"だったこれは明らかに一つの方法です。それがパフォーマンスの場合は、FullText Indiciesが役立つ可能性があります。 –

4

を使用する

リファレンスmsdn上 LIKE を見てください。

より多くの詳細を単一のLIKE句に組み合わせることで、数値フィルタを減らすことができます。

SELECT 
    * 
FROM 
    table_01 
WHERE 
    Text like '%[ABCD]1%' 
+5

少し余裕を持ってサンプルコードを入手したと感じています。 –

+1

実際にはありません。提供されたクエリは、オリジナルと同じことを行うだけです。なぜMSDNのリンクが説明します。 – msms

+1

私は間違っている可能性がありますが、A1、B1などは実際の文字列を検索するためのダミーのプレースホルダと思われます。 –

5

あなたは、サブ文字列の正確な位置を知っている場合は、次のことを試すことができます。

SELECT 
    * 
FROM 
    table_01 
WHERE 
    SUBSTRING(Text,1,2) in ('B1','C1','D1') 
+0

いくつかの調査の後、LIKE()はSUBSTRING()よりも優れたパフォーマンスを示すようです。 – mbrownnyc

0

を私はDatabaseName列のフィルタで2つの異なるデータベースを許可することができるようにこれを行うために必要なSQL Serverプロファイラトレーステンプレートに格納されます。

Like句の本文に記入してください。

John Hartscock's answerの参照を使用して、like節が限定された正規表現パターンの種類を使用することがわかりました。

OPのシナリオでは、MSMS has the solutionです。

Like ABC[OTT][NWH][EOR]% 

文字列の任意のセットにも容易に拡張可能である:私はしたいと仮定すると、

はアブコン、ABCTwo、およびABCThreeが、私は基本的に各文字のための独立したホワイトリストが何であるかを考え出すデータベース。あなたが可能な値の限られたセットをフィルタリングしているなら、あなたがそれを働かせる良いチャンスがあるでしょう、それはまた、最後のパターンはABCOwe、ABCTnr、またはABCOneHippotamusにも一致します。

[^]演算子を使用して、許容できない文字のブラックリストを表示することもできます。

関連する問題