Прежде чем начать это, вам действительно нужно иметь некоторую измеримость вокруг него - нет никакого способа выяснить, помогают ли ваши изменения или вредят, не имея каких-либо хороших, надежных данных для принятия такого решения.Производительность, особенно производительность в масштабе, - это не то, о чем вы можете думать или догадываться.Вы должны знать, как пройти через это.
Что касается вашего решения, я думаю, вы вполне могли бы усугубить проблему или, по крайней мере, создать еще одну проблему здесь.Ваш сервер базы данных теоретически разработан для эффективной обработки произвольных пользовательских запросов в огромных информационных наборах.Linq великолепен, но на самом деле он не предназначен для специальной поисковой системы - у него нет тех возможностей индексирования, которые действительно ожидаются от поисковых систем.Тот факт, что он может представлять вещи как IQueryable, не означает, что вы должны относиться к этому таким образом.И даже если у вас есть способ эффективно выполнять поиск в кеше, у вас есть еще одна проблема, чтобы обойти ее - как определить, что наиболее часто используется?И как вы управляете кэшем ASP.NET, чтобы не начинать извлекать что-то, когда у него мало памяти?
Вам, вероятно, будет лучше обслужить здесь:
- Начиная с некоторого хорошегоустаревшая настройка базы данных - почему ваши запросы такие медленные и дорогие?Вам не хватает где-нибудь индекса?
- Рассматриваете кэширование вывода страницы результатов, особенно если ваши URL-адреса поиска поддерживают GET, так как им довольно легко управлять.Это отличное краткосрочное решение, если сайт тает.
- Посмотрите на правильное построение битов поиска.Использование LIKE% независимо от% не является правильным поиском.Полнотекстовые индексы в вашей базе данных - хорошее начало.Что-то вроде lucene.net , вероятно, лучше.