MySQL + EF обновляется очень медленно?

Я хочу обновить около миллионов (или половину миллионов) записей в моей базе данных, но это было очень медленно. На обновление всего 100000 у меня ушло пару часов. У вас есть идеи, ребята? В основном у меня есть процесс для шифрования определенного значения столбца, а затем его обновления в базе данных. Я не могу сделать это на уровне базы данных из-за зависимости от интеграции кода.

образец кода:

dbContext.Configuration.AutoDetectChangesEnabled = false;

List<Users> usersLst = dbContext.Users.AsNoTracking().Take(500000).ToList(); 

foreach (var usr in usersLst) { 
     usr.Password = this.Encrypt(usr.Password); 
     dataContext.Entry(consumer).State = System.Data.Entity.EntityState.Modified;
}

dbContext.SaveChanges();

Примечание: - Я пробовал использовать SQL Server, он намного быстрее. Обновление 1M записей за 15-20 минут.

Лучший код? Машина мощнее? На самом деле это все догадки, поскольку у нас нет кода, на который можно было бы смотреть. И даже если бы мы это сделали, вы единственный, кто мог бы протестировать его, чтобы увидеть, какой бит замедляет вас.

DavidG 10.07.2018 19:28

Обновил мой пример кода.

user1182370 10.07.2018 20:11
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
88
1

Ответы 1

Обновление займет слишком много времени. По моему личному опыту, я говорю: не обновляйте, если у вас больше 10 КБ данных. Лучший способ

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

  2. Преобразуйте этот запрос выбора в представление. Если вы новичок в создании представления ... просто проверьте структуру здесь

  3. Теперь напишите запрос на вставку, в котором вы берете значения из представления, которое вы только что создали.
  4. Вставка не займет много времени, мне потребовалось 10 минут, чтобы вставить 1 крор данных в таблицу из представления.
  5. Даже если вам кажется, что времени слишком много, вы можете сделать эту вставку с помощью триггера в mysql, что займет всего 3 или 4 минуты.

Надеюсь, я ответил на ваш вопрос. Просто попробуйте и дайте мне обратную связь.

Мой код .net с использованием EntityFramework выполняет все обновления данных. Я не уверен, как я могу это сделать, как вы упомянули выше, с помощью Views.

user1182370 10.07.2018 19:59

Это однократный ввод данных или каждый раз, когда вы должны делать это в своем приложении всякий раз, когда требуется какое-то действие?

Bergin 11.07.2018 06:41

Другие вопросы по теме