2010-11-22 11 views
1

SqlDataSourceで使用する予定のFilterExpressionに関する質問があります。FilterExpression - これは機能しますか?

(itemID like '%{0}%' OR parentID like '%{0}%') AND (source like '%{1}%' OR action like '%{1}%' OR itemID like '%{1}%' OR parentID like '%{1}%' OR item like '%{1}%' OR userid like '%{1}%' OR timestamp like '%{1}%') 

{0}(それも指定することはできませんが)パラメータはクエリ文字列で指定することができ、かつ、{1:私はちょうどこれが機能するかどうか、および特定のシナリオで何が起こるか知りたいです}は、テキストボックスに入力されたものです。基本的に、ユーザーは、クエリ文字列のように 'itemID'または 'parentID'を持つすべてのレコードをリストするページにアクセスできます。テキストボックスにすべての列をフィルタリングするテキストを入力することで、さらに絞り込むことができます。

基本的には、上記のように動作しますか?もしそうでなければ、何とか簡単に変更できますか?

ありがとうございました

答えて

0

それは動作しますか?そうだ。

しかし、これはあなたのデータベースサーバーで地獄になるでしょう。要約すると、インデックス作成、キャッシュされたクエリプラン、またはその他の最適化のヒントを活用することはできません。それは完全なテーブルスキャンになります。

データベースサーバー(どちらのデータベースでも問題ありません)LIKE '%{some value}%'この問題は最初の%で、これは列のどこにでも一致することを意味します。もちろん、すべてのOR文は問合せプランを無視してしまうので、設計全体と同じくらい大きなものではないかもしれません。

これらのフィールドで全文索引を使用することを検討してください。もう一つの考え方は、要件に厳しい目を向けて、基準に入力された異なる値を持つ複数のwhere節を許可する通常のフィールドベースの検索を実装する方が良いかどうかを確認することです。

+0

ありがとう、私は明日同僚とこれについて話し合うつもりです。 – Chris