- PR -

SQL Server 2005 フルテキストサーチでの部分一致

1
投稿者投稿内容
りゅい
会議室デビュー日: 2008/12/21
投稿数: 3
投稿日時: 2008-12-21 01:05
応答速度に関してご存知の方がいらっしゃいましたら教えていただけないでしょうか。

具体的には、100文字程度の短いカラムに対してのSELECT文では、フルテキストサーチでの部分一致(*1)と通常のLIKE述語(*2)ではどちらが速いのかという疑問です。
*1の例
WHERE CONTAINS(<COL1>, '"*あああ*" OR "*いいい*"')"
*2の例
WHERE <COL1> LIKE '%あああ%' OR <COL1> LIKE '%いいい%'

かなり行数のある表を上記のような部分一致検索する必要が出てきそうなので、少しでもパフォーマンスのよい手段をとりたいと思っているのですが、Webで検索してもなかなか参考になる文書が見つかりませんでした・・・。
まだ設計段階で、手元にSQL Serverもないため自分で検証が出来ない状態ですので、経験談とかでも結構です。
ご存知の方がいらっしゃいましたらよろしくお願いいたします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-21 15:21
Express Edition で検証するのも無理ですか?
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-12-21 17:03
引用:

かなり行数のある表



「かなりの行数」と言われても、どの程度が「かなり」かは、人により捉え方が異なってくるのでは?

引用:

Webで検索してもなかなか参考になる文書が見つかりません



検索したら、すぐにSQL Serverのオンラインマニュアル(http://msdn.microsoft.com/ja-jp/library/ms142545(SQL.90).aspx)で、次のような説明が見つかりましたが?

引用:

フルテキスト検索の優れたパフォーマンスを最も実感できるのは、構造化されていない大量のテキストデータに対してクエリを実行する場合でしょう。数百万行のテキスト データに対して LIKE クエリを実行すると、結果が得られるまでに数分かかる場合があります。一方、同じデータに対してフルテキストクエリを実行すると、返される行数にもよりますが、数秒以内で結果を取得できます。



りゅい
会議室デビュー日: 2008/12/21
投稿数: 3
投稿日時: 2008-12-21 23:18
レスポンスありがとうございます。

King様
Express Edition では機能としてフルテキストサーチは提供されていないようですので、未チャレンジですが検証できないと考えていました。
http://www.microsoft.com/japan/sql/prodinfo/features/compare-features.mspx

忠犬様
たしかにかなりの行数では曖昧ですね。申し訳ありません。
想定している行数は1億以上と考えてください。
また、ご指摘頂いた文章は小生も確認しておりましたが、varchar(max)に長い文章を格納しているようなデータについて記述されてるのかと考えていました。
改めて読み直すと数百万「行」とあることから1カラムあたりのテキストの長短に限らず大量の行のテキストデータ全般を対象に述べているように読めますね。
もうちょっと熟考すべきでした・・・(恥ずかしい)
とりあえずフルテキストで実装する方針で設計していこうと思います。
ありがとうございました。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-22 22:47
私もやった事があるわけでは無いので確実ではないですが

Microsoft SQL Server 2005 Express Edition with Advanced Services
http://www.microsoft.com/downloads/details.aspx?familyid=4C6BA9FD-319A-4887-BC75-3B02B5E48A40&displaylang=ja

ここに書いてある「フルテキストクエリ」ってのはフルテキストサーチとは別ですかね?
間違ってたらすみません。
りゅい
会議室デビュー日: 2008/12/21
投稿数: 3
投稿日時: 2008-12-23 23:38
King様
Express Edition with Advanced Services をインストールしてみたところ、フルテキストインデックスが作成できそうです。
with Advanced Services ならば使えるのですね。
この後、実際にいじって感触を確かめてみます。
ご指摘ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)