FilterExpression - 这会有用吗?

时间:2010-11-22 19:22:44

标签: c# asp.net filter

我对我计划在我的SqlDataSource上使用的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”的记录的页面,如查询字符串。然后,他们可以通过在文本框中键入任何他们想要过滤所有列的文本来进一步缩小范围。

基本上,它会如上所述工作吗?如果没有,我能以某种方式轻易改变吗?

由于

1 个答案:

答案 0 :(得分:0)

它会起作用吗?看来是这样。

然而,这将是你的数据库服务器上的地狱。简而言之,您将无法利用任何索引,缓存查询计划或任何其他优化提示。它将导致全表扫描。

数据库服务器(无论哪一个)无法优化LIKE '%{some value}%'问题是第一个%,这意味着匹配列中的任何位置。当然,所有的OR语句都会抛出查询计划,所以也许这并不像整个设计那么大。

您可以考虑在这些字段上使用全文索引。另一个想法是回过头来仔细研究这些要求,看看实现基于常规字段的搜索是否更好,这种搜索允许多个where子句为条件输入不同的值。