2010-11-22 52 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 2010-11-22 20:28:03