關於某些資料究竟是刪除了再新增好還是直接修改比較好
阿新 • • 發佈:2020-01-06
今天心血來潮,尋思如果改一條資料,採用刪除更快還是修改更快一些
我使用的是EF,沒有做任何的封裝,純簡單的引入
第一次我用了一萬條資料做測試
結果顯而易見,光刪除資料用了39秒。更別說再新增一萬條資料了
第二次我用了5000條資料做測試
但是讓我困惑的是,居然用了1分多進行刪除
第三次用一千條資料做測試
修改幾乎沒有用多少時間
忽然覺著,也許當你針對某些資料進行修改的時候,還是採用直接修改的方法比較好一些
這個時候 非物理刪除就起到了很好的作用
只是這個欄位一旦加上,就一定要小心小心再小心,最好直接封裝到底層,要不然,一個疏忽,就可能會有意外的驚喜。
而且還好針對唯一性做驗證,假如有一條一模一樣的資料,究竟是改狀態還是新增一條新的資料
我的ef 並沒有做任何處理,以下是我的程式碼
1 MyEntities myTest = new MyEntities(); 2 Console.WriteLine("1000"); 3 var remeData = myTest.TestTable1.Where(c => c.Id <= 27000).ToList(); 4 var aTime = DateTime.Now; 5 myTest.TestTable1.RemoveRange(remeData); 6 myTest.SaveChanges(); 7 var bTime = DateTime.Now; 8 var remeTime = bTime - aTime; 9 Console.WriteLine($"Remove: 原始時間:{aTime},結束時間:{bTime},用時:{remeTime}"); 10 var modifyData = myTest.TestTable1.Where(c => c.Id > 27000 && c.Id <= 28000).ToList(); 11 var cTime = DateTime.Now; 12 foreach (var item in modifyData) 13 { 14 item.Name = "123"; 15 item.Content = "FDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjgFDSFSDGFDFHGFDHFGHJGFHJGHJfhdfgdgsklgjasl;fkjdalghjdlskjgndklfgjds;flkgjsdkflgjdskfjgkdslfjg"; 16 } 17 myTest.SaveChanges(); 18 var dTime = DateTime.Now; 19 var modifyTime = dTime - cTime; 20 Console.WriteLine($"Modify: 原始時間:{cTime},結束時間:{dTime},用時:{modifyTime}"); 21 Console.WriteLine("完成"); 22 Console.ReadLine();
1 public MyEntities() : base("EFDbContext") 2 { 3 Database.SetInitializer<MyEntities>(null); 4 } 5 public DbSet<TestTable1> TestTable1 { get; set; } 6 protected override void OnModelCreating(DbModelBuilder modelBuilder) 7 { 8 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 9 base.OnModelCreating(modelBuilder); 10 } 11 } 12 13 public class TestTable1 14 { 15 public int Id { get; set; } 16 public string Name { get; set; } 17 public string Content { get; set; } 18 }
也有可能是我沒有任何封裝的緣故吧
為此我決定開始好好專研以下ef
學習的路是漫長的
程式碼的路也是漫長的