1、表中有三个字段,已经有100多万条数据,每次插入10万条数据 时间单位:秒

秒 Dapper批量Model插入时间:40.6165513,Dapper单条Model插入时间:95.9492972,Dapper单条sql插入时间:91.0191095,原生单条sql插入时间:90.5096905

秒 Dapper批量Model插入时间:40.4729053,Dapper单条Model插入时间:99.0270506,Dapper单条sql插入时间:92.7325932,原生单条sql插入时间:91.9713511

秒 Dapper批量Model插入时间:41.0260065,Dapper单条Model插入时间:95.8173737,Dapper单条sql插入时间:90.9012987,原生单条sql插入时间:90.2153092

秒 Dapper批量Model插入时间:41.5675273,Dapper单条Model插入时间:101.9446306,Dapper单条sql插入时间:94.4770289,原生单条sql插入时间:92.9758614

测试时间代码

List<gk_area> lst = new List<gk_area>();
for (int i = ; i < ; i++)
{
gk_area tmp = new gk_area();
tmp.gk_AreaId = Guid.NewGuid().ToString("N");
tmp.gk_AreaName = "测试:" + tmp.gk_AreaId;
tmp.gk_DelFlag = "";
lst.Add(tmp);
}
if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
new DapperHelper().InsertBulk<gk_area>(lst); // 需要测试的代码 ....
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "秒 Dapper批量Model插入时间:" + seconds + ",";
} lst = new List<gk_area>();
for (int i = ; i < ; i++)
{
gk_area tmp = new gk_area();
tmp.gk_AreaId = Guid.NewGuid().ToString("N");
tmp.gk_AreaName = "测试:" + tmp.gk_AreaId;
tmp.gk_DelFlag = "";
lst.Add(tmp);
}
if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
foreach (var item in lst)
{
new DapperHelper().Insert<gk_area>(item);
}
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "Dapper单条Model插入时间:" + seconds + ",";
} lst = new List<gk_area>();
for (int i = ; i < ; i++)
{
gk_area tmp = new gk_area();
tmp.gk_AreaId = Guid.NewGuid().ToString("N");
tmp.gk_AreaName = "测试:" + tmp.gk_AreaId;
tmp.gk_DelFlag = "";
lst.Add(tmp);
}
if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
foreach (var item in lst)
{
new DapperHelper().ExcuteNonQuery("insert into gk_area (gk_AreaId,gk_AreaName) values ('" + item.gk_AreaId + "','" + item.gk_AreaName + "')");
}
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "Dapper单条sql插入时间:" + seconds + ",";
} lst = new List<gk_area>();
for (int i = ; i < ; i++)
{
gk_area tmp = new gk_area();
tmp.gk_AreaId = Guid.NewGuid().ToString("N");
tmp.gk_AreaName = "测试:" + tmp.gk_AreaId;
tmp.gk_DelFlag = "";
lst.Add(tmp);
}
if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
foreach (var item in lst)
{
new DapperHelper().ExecuteNonQuery1("insert into gk_area (gk_AreaId,gk_AreaName) values ('" + item.gk_AreaId + "','" + item.gk_AreaName + "')");
}
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "原始单条sql插入时间:" + seconds + ",";
}

插库方法

#region +Insert 新增Model
/// <summary>
/// 新增
/// </summary>
/// <returns></returns>
public int Insert<T>(T t) where T : class, new()
{
int result = ;
try
{
using (MySqlConnection con = new MySqlConnection(connection))
{
string strSqlText = GetSqlInsert<T>(t);
result = con.Execute(strSqlText, t);
}
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
return result;
} private string GetSqlInsert<T>(T t)
{
Type type = t.GetType();
PropertyInfo[] properties = type.GetProperties();
string sqlText = "INSERT INTO {0} ({1}) VALUES ({2})"; StringBuilder fileds = new StringBuilder();
StringBuilder values = new StringBuilder();
foreach (var proper in properties)
{
if (!proper.CustomAttributes.Any(x => x.AttributeType == typeof(AutoKeyAttribute))
&& !proper.CustomAttributes.Any(x => x.AttributeType == typeof(DefaultAttribute)))
{
fileds.Append(proper.Name + ",");
values.Append("@" + proper.Name + ",");
}
}
sqlText = string.Format(sqlText, type.Name, fileds.ToString().TrimEnd(','), values.ToString().TrimEnd(','));
return sqlText;
} #endregion #region +InsertBulk 批量新增
/// <summary>
/// 批量新增
/// </summary>
/// <returns></returns>
public int InsertBulk<T>(List<T> list) where T : class, new()
{
int result = ;
try
{
using (MySqlConnection con = new MySqlConnection(connection))
{
string strSqlText = GetSqlInsertBulk<T>(list);
result = con.Execute(strSqlText, list);
}
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
return result;
} private string GetSqlInsertBulk<T>(List<T> list)
{
return list.Count() > ? GetSqlInsert(list[]) : "";
} #endregion /// <summary>
/// 原始sql
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecuteNonQuery1(string sql)
{
using (MySqlConnection conn = new MySqlConnection(connection))
{
MySqlCommand cmd = new MySqlCommand();
if (conn.State != ConnectionState.Open)
conn.Open(); cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
return cmd.ExecuteNonQuery();
}
}

2、表中存在3029949(300万)条数据 时间单位:秒

反射字段查询时间:22.651388,Dapper查询时间:9.7697742,原生查询1时间:13.8903755,原生查询2时间:16.1955305

反射字段查询时间:21.3172684,Dapper查询时间:9.7593554,原生查询1时间:14.3009033,原生查询2时间:15.085577

反射字段查询时间:21.8932407,Dapper查询时间:8.3832515,原生查询1时间:13.4945138,原生查询2时间:17.7821992

反射字段查询时间:21.9676583,Dapper查询时间:9.3833032,原生查询1时间:13.5412978,原生查询2时间:15.5048999

测试时间代码

if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
var test1 = new DapperHelper().FindToList<gk_area>("select * from gk_area");
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "反射字段查询时间:" + seconds + ",";
} if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
var test2 = new DapperHelper().QueryToList<gk_area>("select * from gk_area");
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "Dapper查询时间:" + seconds + ",";
} if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
var test3 = new DapperHelper().GetDataTable("select * from gk_area");
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "原始查询时间:" + seconds + ",";
}
if (true)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// 需要测试的代码 ....
var test3 = new DapperHelper().ExecuteDataTable("select * from gk_area");
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
timeStr += "原始查询2时间:" + seconds + ",";
}

查库方法

#region +FindToList  查询数据集合 反射字段查询 废弃
/// <summary>
/// 同步查询数据集合
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public List<T> FindToList<T>(string sql, DynamicParameters param = null, bool flag = false) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = con.ExecuteReader(sql, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = con.ExecuteReader(sql, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
List<T> tlist = new List<T>();
do
{
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
if (tlist != null) tlist.Add(t);
} while (dataReader.Read());
return tlist;
}
}
#endregion #region +QueryToList Dapper 查询数据集合
/// <summary>
/// 同步查询数据集合
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public List<T> QueryToList<T>(string sql, DynamicParameters param = null, bool flag = false) where T : class, new()
{
List<T> list = null;
try
{
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
list = con.Query<T>(sql, param, null, true, null, CommandType.StoredProcedure) as List<T>;
}
else
{
list = con.Query<T>(sql, param, null, true, null, CommandType.Text) as List<T>;
}
}
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
return list;
}
#endregion /// <summary>
/// 原始查询1
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataTable GetDataTable(string sql)
{
//创建一个MySqlCommand对象
MySqlCommand cmd = new MySqlCommand();
//创建一个MySqlConnection对象
MySqlConnection conn = new MySqlConnection(connection); try
{
if (conn.State != ConnectionState.Open)
conn.Open(); cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataTable ds = new DataTable();
adapter.Fill(ds);
//清除参数
cmd.Parameters.Clear();
conn.Close();
return ds;
}
catch (Exception e)
{
throw e;
}
} /// <summary>
/// 原始查询2
/// </summary>
/// <param name="SQLString"></param>
/// <returns></returns>
public DataTable ExecuteDataTable(string SQLString)
{
using (MySqlConnection conn = new MySqlConnection(connection))
{
DataSet ds = new DataSet();
try
{
conn.Open();
MySqlDataAdapter command = new MySqlDataAdapter(SQLString, conn);
command.Fill(ds, "ds");
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
throw new Exception(ex.Message);
}
return ds.Tables[];
}
}

C# Mysql Dapper和原生sql 插入和查询速度比较的更多相关文章

  1. Sql server2005 优化查询速度50个方法小结

    Sql server2005 优化查询速度50个方法小结   Sql server2005优化查询速度51法查询速度慢的原因很多,常见如下几种,大家可以参考下.   I/O吞吐量小,形成了瓶颈效应.  ...

  2. JPA或Hibernate中使用原生SQL实现分页查询、排序

    发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...

  3. Hibernate运行原生sql并将查询的结果转化为对象

    原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询.标量查询(Scalar queri ...

  4. mysql处理海量数据时的一些优化查询速度方法

      最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法. 由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果w ...

  5. Mysql处理海量数据时的一些优化查询速度方法(转)

    最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法. 由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果whe ...

  6. Mysql处理海量数据时的一些优化查询速度方法【转】

    最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法.由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果wher ...

  7. MySQL 处理海量数据时的一些优化查询速度方法

    查询速度慢的原因 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O 吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6 ...

  8. ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度

    (一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...

  9. 利用SQL索引提高查询速度

    1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构. 索引的使用要恰到好处,其使用原则如下: 在经常进行连接 ...

随机推荐

  1. MvcPager分页控件使用注意事项!

    初学MVC,做了个单页面应用,需要显示多个分页,并无刷新更新. 找到了MvcPager控件,非常好用,在使用ajax过程中遇到很多问题.慢慢调试和杨老师(MvcPaegr作者)请教,总于都解决了. 首 ...

  2. 设置oracle主键自增长

    创建test表后,创建序列: CREATE sequence seq_test INCREMENT BY 1 START WITH 1 minvalue 1   成功后,插入一条语句进行测试:   I ...

  3. fast powf

    测试结果: sum (fast) in clock 1562sum (fast2) in clock 1407sum (fast3) in clock 3156sum in clock 7797Err ...

  4. js中的基本类型与引用类型学习

    一.基本数据类型 ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String,也称为基本数据类型,ES6 ...

  5. docker-compose批量管理docker容器

    # docker-compose编排工具 #批量管理(构建.启动容器) #centos7环境准备#安装docker-ce #安装docker-compose v1. sudo curl -o /usr ...

  6. MySQL(安装,服务,创建用户及授权)

    参考:http://www.cnblogs.com/wupeiqi/p/5713315.html 单机程序(自己DB)          单机程序(公用DB)      MySQL:是用于管理文件的一 ...

  7. Python(网络基础)

    day33 参考:http://www.cnblogs.com/linhaifeng/articles/5937962.html IP协议: 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址, ...

  8. Python-WSGI协议,mini-web框架

    本次带给大家的是WSGI-mini-web框架, 其中要下载一些网络页面, 大佬们不要见怪. 我所做的mini-web 支持路由, 正则表达式, 添加了log日志功能:解析了url编码可以用 来理解W ...

  9. 解决input和button错位(不齐)问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Android自定义View创建流程

    Android的framework提供了很多高质量的view,有时业务需求需要自定义View,其实现流程大致如下: 1.在values/attrs.xml中定义支持的自定义属性,示例如下: