В нашем пользовательском интерфейсе пользователи могут бесплатно отправлять текст, который применяется к нескольким полям.
q = q.Where(p => p.Account.Contains(query)
|| p.AccountName.Contains(query)
|| p.AccountAKA.Contains(query)
|| p.AccountRef.Contains(query));
Это означает SQL. Есть ли более оптимальный способ опроса, поскольку это происходит медленно.
Есть около 20 000 строк. Размер диска базы данных не имеет значения, использование памяти.
Поскольку все это текстовые поля, каждое из значений преобразуется в Account LIKE '%'+ query+ '%'
. Все запросы с подстановочными знаками с обеих сторон будут медленными, к сожалению, не так много, что можно сделать.
Может быть, можно использовать StartsWith()
вместо Contains()
? Это переведет "LIKE query +"%, который, как правило, намного быстрее?
Лучшим решением было бы изменить вашу модель данных и использовать столбец Description
котором есть ВСЕ информация об имени учетной записи, чтобы вы могли сделать свой запрос в отношении одного столбца. Обновления к записи приводят к обновлению этого столбца Описание.
LIKE %query%
недостаточно эффективен. Проблему может решить индексация: blogs.msdn.com/b/varund/archive/2009/11/30/…