FilterExpression - это будет работать? - PullRequest
1 голос
/ 22 ноября 2010

У меня есть вопрос о FilterExpression, который я планирую использовать на моем SqlDataSource.Я просто хочу знать, будет ли это работать, и что произойдет в определенных сценариях:

(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 голосов
/ 22 ноября 2010

Будет ли это работать?Это выглядит так.

Однако на вашем сервере баз данных это будет адом.В двух словах, вы не сможете использовать индексирование, кэшированные планы запросов или любые другие советы по оптимизации.Это приведет к полному сканированию таблицы.

Сервер базы данных (неважно, какой именно) не способен оптимизировать LIKE '%{some value}%' Проблема заключается в первом%, что означает совпадение в любом месте столбца.Конечно, все операторы OR в любом случае будут выбрасывать планы запросов, поэтому, возможно, это не так уж важно, как весь проект.

Возможно, вы захотите использовать полнотекстовое индексирование для этих полей.Другой идеей было бы вернуться назад и внимательно взглянуть на требования, чтобы понять, не лучше ли реализовать регулярный поиск на основе полей, который допускает множественные предложения where с различными значениями, введенными для критериев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...