数据库插入速度比较

一、使用EF插入,用时8135ms。

 1         Stopwatch stopWatch = new Stopwatch();
 2             stopWatch.Start();
 3             using (var content = new HardwareContext())
 4             {
 5                 for(int i = 20; i < 1000; i++)
 6                 {
 7                     HardwareLimited hardwareLimited = new HardwareLimited
 8                     {
 9                         id = i,
10                         DataId = "00000000000502",
11                         IsEnable = true
12                     };
13                     content.HardwareLimiteds.Add(hardwareLimited);
14                 }
15                 content.SaveChanges();
16             }
17             stopWatch.Stop();
18             MessageBox.Show(stopWatch.ElapsedMilliseconds.ToString());

二、直接插入,用时1.745ms。

 1             string sql = "";
 2             Stopwatch stopWatch = new Stopwatch();
 3             stopWatch.Start();
 4             for (int i = 20; i < 1000; i++)
 5             {
 6                 sql += "  insert into  [ProjectTS].[dbo].[MSHardwareLimited] (id,DataId,IsEnable)values(‘"+i.ToString()+ "‘,‘00000000000502‘,1) ";
 7             }
 8             DBHelp.ExecuteSql(sql);
 9             stopWatch.Stop();
10             MessageBox.Show(stopWatch.ElapsedMilliseconds.ToString());

三、使用SqlBulkCopy插入,用时244ms。

 1          DataTable dataTable = new DataTable();
 2             dataTable.Columns.Add("id", typeof(int));
 3             dataTable.Columns.Add("DataId", typeof(string));
 4             dataTable.Columns.Add("IsEnable", typeof(bool));
 5             for (int i = 20; i < 1000; i++)
 6             {
 7                 DataRow dataRow = dataTable.NewRow();
 8                 dataRow["id"] = i;
 9                 dataRow["DataId"] = "00000000000502";
10                 dataRow["IsEnable"] = true;
11                 dataTable.Rows.Add(dataRow);
12             }
13             Stopwatch stopWatch = new Stopwatch();
14             stopWatch.Start();
15             using (SqlConnection conn = new SqlConnection(DBHelp.connectString))
16             {
17                 conn.Open();
18                 using (SqlBulkCopy bulk = new SqlBulkCopy(DBHelp.connectString))
19                 {
20                     bulk.BatchSize = 10000;
21                     bulk.DestinationTableName = "[ProjectTS].[dbo].[MSHardwareLimited]";
22                     bulk.ColumnMappings.Add("id", "id");
23                     bulk.ColumnMappings.Add("DataId", "DataId");
24                     bulk.ColumnMappings.Add("IsEnable", "IsEnable");
25                     bulk.WriteToServer(dataTable);
26                 }
27                 conn.Close();
28                 conn.Dispose();
29             }
30             stopWatch.Stop();
31             MessageBox.Show(stopWatch.ElapsedMilliseconds.ToString());
时间: 2024-10-10 14:41:34

数据库插入速度比较的相关文章

160304、mysql数据库插入速度和读取速度的调整记录

需求:由于项目变态,需要在一个比较短时间段急剧增加数据库记录(两三天内,由于0增加至5亿).在整个过程调优过程非常艰辛 思路: (1)提高数据库插入性能中心思想:尽量将数据一次性写入到Data File和减少数据库的checkpoint 操作.这次修改了下面四个配置项: 1)将 innodb_flush_log_at_trx_commit 配置设定为0:按过往经验设定为0,插入速度会有很大提高. 0: Write the log buffer to the log file and flush

Sql server 大数据量插入速度慢或丢失数据解决办法

问题描述:我的设备每秒2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,找了好多解决方法,整理了两种效果比较明显的解决办法: 第一种:使用Sql Server函数: 1.将数据组合成字串,使用函数将数据插入内存表,后将内存表数据复制到要插入的表. 2.组合成的字符换格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|

sqlite3 多线程和锁 ,优化插入速度及性能优化

一. 是否支持多线程? SQLite官网上的“Is SQLite threadsafe?”这个问答. 简单来说,从3.3.1版本开始,它就是线程安全的了.而iOS的SQLite版本没有低于这个版本的,当然,你也可以自己编译最新版本. 不过这个线程安全仍然是有限制的,在这篇<Is SQLite thread-safe?>里有详细的解释.另一篇重要的文档就是<SQLite And Multiple Threads>.它指出SQLite支持3种线程模式: 单线程:禁用所有的mutex锁,

MySQL数据库插入速度调整

环境介绍: CentOS 6.5 MySQL 5.5.40 硬件:4核,4GB 参考链接: http://dev.mysql.com/doc/refman/5.5/en/insert-speed.html http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html 由于业务量迅速扩展,对写入速度需求越来越高,现预估需要将数据插入速度由每分钟2000条,调整为每秒100条即每分钟6000条: 解决办法: 1.优化数据库主机

关于Mysql表InnoDB下插入速度慢的解决方案

最近做了 server_log 日志数据库记录,仅仅插入,由平台来获取数据进行分析的需求. 但是内部反馈插入数据库记录非常耗时,我就很纳闷了,一个insert怎么会 30-50ms 呢?按说应该在 0.5ms 以内的: 经过分析,发现是InnoDB数据库的Row_Format格式问题,改为MyISAM表就可以了,但是InnoDB是支持事务的,一般是推荐InnoDB的,好奇为什么. 而且InnoDB的表,只能选择 COMPACT 和REDUNDANT 两种行格式(RoW_FORMAT). 经过搜索

DButils工具类可以用来获取数据库连接向数据库插入更新删除对象2

package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.lang.reflect.*; import java.sql.*; import java.text.SimpleD

golang 下 mongodb 与 postgresql 插入速度的测试

近期看了篇文章,说是postgresql也支持nosql,定义了专属的jsonb数据类型,而且速度比mongodb还快,今天验证了下,同样的数据,postgre的插入速度只是mongo 的三分一不到.有可能是各自的驱动造成的. 数据结构: type StockDay struct { Date int32 O, H, L, C, V, A float32 } mongo 用了mgo 包,插入代码如下: func ReadHq(conn net.Conn, c *mgo.Collection, C

数据库 插入时 碰到NULL报错判断的一种方法(技巧)

//public static object ToDBNull(object value) 判断插入数据的时候个别参数不能为空的时候做的判断方法 //{ // if (value == null) // { // return ToDBNull.Value; // } // else // { // return value; // } } static void Main(string[] args) { // new SqlParameter(@"BirthDay",ToDBNul

提高数据库查询速度的几个思路

提高数据库查询速度的几个思路 :1.缓存,在持久层或持久层之上做缓存;2.数据库表的大字段剥离,保证单条记录的数据量很小; 3.恰当地使用索引;4.必要时建立多级索引; 5.分析Oracle的执行计划,通过表数据统计等方式协助数据库走正确的查询方式,该走索引就走索引,该走全表扫描就走全表扫描; 6.表分区和拆分,无论是业务逻辑上的拆分(如一个月一张报表.分库)还是无业务含义的分区(如根据ID取模分区);7.RAC;8.字段冗余,减少跨库查询和大表连接操作; 9.数据通过单个或多个JOB生成出来,