У меня есть образец базы данных с 8 миллионами пользователей, где страница управления аккаунтом занимает 8 секунд для рендеринга. Это сводится к методу GetUserId, вызывающему членство GetUser.Улучшение производительности запросов SimpleMembership?
SQL-GetUser выглядит следующим образом:
SELECT [UserId] FROM [Users] WHERE (UPPER([UserName]) = @0)
Когда я бегу следующие вопросы в анализатор запросов я получаю следующие результаты
SELECT [UserId] FROM [Users] WHERE [UserName] = 'CARL'
-- This question takes 11 milliseconds on my dev machine
SELECT [UserId] FROM [Users] WHERE UPPER([UserName]) = 'CARL'
-- This question takes 3.5 seconds on my dev machine
Столбец UserName имеет следующий индекс:
CREATE NONCLUSTERED INDEX IX_Users_UserName ON dbo.Users (UserName)
Можно ли изменить запрос sql? Можно ли улучшить производительность запроса любым другим способом?
Это точное поведение оказывается равным 45% от нашего времени ожидания и загрузки. Мы увеличиваем число пользователей и 3x активных пользователей в настоящее время = 3x ожидания и ресурсы жевали. ответ прошел от 1 секунды до 3, поскольку количество пользователей увеличилось только с 650 326 пользователями в базе данных ... Я изучаю использование Identity для замены SimpleMembership asap –
@Hunter Легко изменить исходный код и запустить пользовательскую сборку. Вот что я сделал. –
Спасибо! Я тоже нашел это сегодня вечером! Они просто все открывают с открытым исходным кодом, это тоже должно быть! Когда я в последний раз смотрел, это было перед всеми этими новыми инициативами в MS. Но в конце коснуться наименьшего количества кода. Я запустил этот камень прямо здесь. И человек - НОЧЬ и день ... Я собираюсь добавить его в качестве ответа. http://i1.blogs.msdn.com/b/webdev/archive/2015/02/11/improve-performance-by-optimizing-queries-for-asp-net-identity-and-other-membership-providers .aspx –