数据库更新效率测试
有个项目记录采集点的实时数据(mysql5.7),约5000条记录,在C#的DataTable更新好后,一次性Update到表中,但速度非常慢要4分钟左右,但程序定时更新为5分钟,经常超时,也找不到好的办法,最后把这个表改为Memory引擎后速度提高到5秒左右,总算解决了问题。
因为此,在本机做了些测试,为以后的数据库选型做个准备,以下是测试结果:
结论:
1. 无论插入还是更新,mssql是王者,更新5000条记录1s内解决。
2. 其他数据库的更新基本都在5s左右,差别不明显
3. 如果使用maridb或mysql等,使用Memory引擎做这种实时缓存是个很好的选择。
4. 在本机测试时,我把mysql57的内存参数调高,但效果不明显。
5. 生产机和我本机测试都是mysql5.7,但生产机的服务器明显不如我的PC机,无论InnoDB还是Memory引擎,未分析具体原因。
6. 对这些临时保存的数据,大量更新时不如全部删除,再插入,耗时只有1/10左右。
7.如果不方便使用mssql的情况下,mariadb是个较好的选择,比mysql和pgsql小巧,功能足够,并且还可使用Memony引擎做些特殊操作。
插入时代码示例:
//mssql转pgsql15.3 //插入5000条为4997ms Stopwatch sw = new Stopwatch(); sw.Start(); string cnstr = @"server=.\sql2016;database=test;uid=sa;password=st#"; string sql = "select * from aqgl_zy_position2023"; SqlDataAdapter da = new SqlDataAdapter(sql, cnstr); DataTable dt = new DataTable(); da.Fill(dt); foreach (DataRow dr in dt.Rows) dr.SetAdded(); string cnstr1 = @"server=localhost;database=testdb;uid=postgres;password=st#"; Npgsql.NpgsqlDataAdapter da2 = new Npgsql.NpgsqlDataAdapter(sql, cnstr1); Npgsql.NpgsqlCommandBuilder b = new Npgsql.NpgsqlCommandBuilder(da2); da2.Update(dt); long t1 = sw.ElapsedMilliseconds; this.textBox2.Text = t1.ToString();
更新时代码:
//UpdateBatchSize=0不支持 //UpdateBatchSize=1时,513/5465 //UpdateBatchSize=5001不支持 Stopwatch sw = new Stopwatch(); sw.Start(); string cnstr = @"server=localhost;database=testdb;uid=postgres;password=st"; string sql = "select * from aqgl_zy_position2023"; Npgsql.NpgsqlDataAdapter da = new Npgsql.NpgsqlDataAdapter(sql, cnstr); DataTable dt = new DataTable(); da.Fill(dt); long t1 = sw.ElapsedMilliseconds; foreach (DataRow dr in dt.Rows) { dr["mx"] = double.Parse(dr["mx"].ToString()) + 1; dr["my"] = double.Parse(dr["my"].ToString()) + 1; } Npgsql.NpgsqlCommandBuilder b = new Npgsql.NpgsqlCommandBuilder(da); //da.UpdateBatchSize = 0; this.textBox1.Text = da.UpdateBatchSize.ToString() + "/" + dt.Rows.Count; da.Update(dt); long t2 = sw.ElapsedMilliseconds; this.textBox2.Text = t1 + "/" + t2;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2018-09-14 找出文本中的多个手机号码