查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net
最近因为要开发大数据量网站,特作比较。
Linq to SQL 查询 Milliseconds:1910
视图查询 记录数:399997
视图查询 Milliseconds:3435
Entity Framework 查询 记录数:400000
Entity Framework 查询 Milliseconds:4049
企业库存储过程 to DataReader 记录数:399997
企业库存储过程 to DataReader Milliseconds:321
企业库存储过程 to DataSet 记录数:399997
企业库存储过程 to DataSet Milliseconds:2807
ADO.Net存储过程 to SqlDataReader 记录数:399997
ADO.Net存储过程 to SqlDataReader Milliseconds:306
企业库SQL语句直接查询 to DataSet 记录数:399997
企业库SQL语句直接查询 to DataSet Milliseconds:3015
企业库SQL语句直接查询 to DataReader 记录数:399997
企业库SQL语句直接查询 to DataReader Milliseconds:367
第二次执行:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using System.Diagnostics;
using System.Data.Objects;
using System.Data.SqlClient; namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ SeewoECP.Model.School model = new SeewoECP.Model.School();
model.ID = "1";
model.Name = "test";
model.Country = "test";
model.Province = "test";
model.City = "test";
model.Address = "test";
model.ZipCode = "test";
model.Phone = "test";
model.IsApproved = true; int repeatTimes = 1; Stopwatch sw3 = new Stopwatch();
sw3.Start(); for (int i = 0; i < repeatTimes; i++)
{
DataClasses1DataContext dc = new DataClasses1DataContext(); //IEnumerable<School> schs = dc.ExecuteQuery<School>("Select * from School");
//System.Data.Linq.Table<School> schools = dc.Schools;
List<School> schools = dc.Schools.ToList();
int count = 0;
foreach (School sc in schools)
{
count++;
}
//List<School> schs = schools.ToList();
Response.Write("<br>Linq to SQL 查询 记录数:" + schools.Count().ToString()); } sw3.Stop();
Response.Write("<br>Linq to SQL 查询 Milliseconds:<font color='#FF0000'>" + sw3.ElapsedMilliseconds+"</font>"); Stopwatch sw2 = new Stopwatch();
sw2.Start();
DataSet dr = new DataSet();
for (int i = 0; i < repeatTimes; i++)
{
dr = selectView();
}
Response.Write("<br>视图查询 记录数:" + dr.Tables[0].Rows.Count); sw2.Stop();
Response.Write("<br>视图查询 Milliseconds:<font color='#FF0000'>" + sw2.ElapsedMilliseconds + "</font>"); Stopwatch sw4 = new Stopwatch();
sw4.Start(); for (int i = 0; i < repeatTimes; i++)
{
ECPDBEntities1 ecp = new ECPDBEntities1();
ObjectSet<ClassGroup> classGroup = ecp.ClassGroup;
//List<ClassGroup> classGroup = ecp.ClassGroup.ToList();
//List<ClassGroup> classGroup =
//from s in ecp.ClassGroup where s.id < 10 select s.name; //ClassGroup cg = classGroup.Single(s => s.ID == "1");
int count = 0;
foreach (ClassGroup c in classGroup)
{
count++;
//Response.Write( c.ClassName);
} Response.Write("<br>Entity Framework 查询 记录数:" + classGroup.Count());
} sw4.Stop();
Response.Write("<br>Entity Framework 查询 Milliseconds:<font color='#FF0000'>" + sw4.ElapsedMilliseconds + "</font>"); Stopwatch sw = new Stopwatch();
sw.Start(); for (int i = 0; i < repeatTimes; i++)
{ IDataReader reader = selectPro();
if (reader != null)
{
int count = 0;
while (reader.Read())
{
count++;
//Response.Write(String.Format("{0}, {1}",reader[0], reader[1]));
}
Response.Write("<br>企业库存储过程 to DataReader 记录数:" + count); reader.Close();
}
} sw.Stop();
Response.Write("<br>企业库存储过程 to DataReader Milliseconds:<font color='#FF0000'>" + sw.ElapsedMilliseconds + "</font>"); Stopwatch sw6 = new Stopwatch();
sw6.Start(); DataSet ds=new DataSet();
for (int i = 0; i < repeatTimes; i++)
{
ds = selectProSet();
}
Response.Write("<br>企业库存储过程 to DataSet 记录数:" + ds.Tables[0].Rows.Count); sw6.Stop();
Response.Write("<br>企业库存储过程 to DataSet Milliseconds:<font color='#FF0000'>" + sw6.ElapsedMilliseconds + "</font>"); Stopwatch sw5 = new Stopwatch();
sw5.Start(); for (int i = 0; i < repeatTimes; i++)
{
SqlDataReader reader = selectNormalPro();
int count = 0;
while (reader.Read())
{
count++;
//Response.Write(String.Format("{0}, {1}",reader[0], reader[1]));
} Response.Write("<br>ADO.Net存储过程 to SqlDataReader 记录数:" + count);
reader.Close();
} sw5.Stop();
Response.Write("<br>ADO.Net存储过程 to SqlDataReader Milliseconds:<font color='#FF0000'>" + sw5.ElapsedMilliseconds + "</font>"); Stopwatch sw1 = new Stopwatch();
sw1.Start(); DataSet ds1 = new DataSet();
for (int i = 0; i < repeatTimes; i++)
{
ds1 = selectSQL();
}
Response.Write("<br>企业库SQL语句直接查询 to DataSet 记录数:" + ds1.Tables[0].Rows.Count); sw1.Stop();
Response.Write("<br>企业库SQL语句直接查询 to DataSet Milliseconds:<font color='#FF0000'>" + sw1.ElapsedMilliseconds + "</font>"); Stopwatch sw8 = new Stopwatch();
sw8.Start(); for (int i = 0; i < repeatTimes; i++)
{
IDataReader reader = selectSQLReader(); int count = 0;
while (reader.Read())
{
count++;
//Response.Write(String.Format("{0}",reader["ID"]));
} Response.Write("<br>企业库SQL语句直接查询 to DataReader 记录数:" + count);
reader.Close();
} sw8.Stop();
Response.Write("<br>企业库SQL语句直接查询 to DataReader Milliseconds:<font color='#FF0000'>" + sw8.ElapsedMilliseconds + "</font>"); //DataSet d1 = select1();
//DataSet d2 = select2();
//IDataReader dr = select3();
} public int Add(SeewoECP.Model.School model,int i)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand("InsertSchool");
db.AddInParameter(dbCommand, "ID", DbType.String, i);
db.AddInParameter(dbCommand, "Name", DbType.String, model.Name);
db.AddInParameter(dbCommand, "Country", DbType.String, model.Country);
db.AddInParameter(dbCommand, "Province", DbType.String, model.Province);
db.AddInParameter(dbCommand, "City", DbType.String, model.City);
db.AddInParameter(dbCommand, "Address", DbType.String, model.Address);
db.AddInParameter(dbCommand, "ZipCode", DbType.String, model.ZipCode);
db.AddInParameter(dbCommand, "Phone", DbType.String, model.Phone);
db.AddInParameter(dbCommand, "IsApproved", DbType.Boolean, model.IsApproved);
return db.ExecuteNonQuery(dbCommand);
} Database db;
DbCommand dbCommand;
public DataSet select()
{
try
{
db = DatabaseFactory.CreateDatabase();
dbCommand = db.GetStoredProcCommand("SelectSchoolsAll");
return db.ExecuteDataSet(dbCommand);
}
finally
{
dbCommand.Connection.Close();
dbCommand.Connection.Dispose();
}
} public DataSet select1()
{
//Database db1 = DatabaseFactory.CreateDatabase();
dbCommand = db.GetStoredProcCommand("SelectSystemErrorLogsAll");
return db.ExecuteDataSet(dbCommand);
} public DataSet select2()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand("SelectSystemErrorLogsAll");
return db.ExecuteDataSet(dbCommand);
} public DataSet selectSQL()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand("select * from School");
return db.ExecuteDataSet(dbCommand);
} public IDataReader selectSQLReader()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand("select * from School");
return db.ExecuteReader(dbCommand);
} public DataSet selectView()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand("select * from ViewsSchool");
return db.ExecuteDataSet(dbCommand);
} public DataSet selectProSet()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand("SelectSchoolsAll");
return db.ExecuteDataSet(dbCommand);
} public IDataReader selectPro()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand("SelectSchoolsAll");
return db.ExecuteReader(dbCommand);
} public SqlDataReader selectNormalPro()
{
SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=ECPDB;Integrated Security=SSPI;");
SqlDataReader returnReader;
connection.Open();
SqlCommand command = BuildQueryCommand(connection, "SelectSchoolsAll", null);
command.CommandType = CommandType.StoredProcedure;
returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
return returnReader;
} private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
command.Parameters.Add(parameter);
}
}
} return command;
} }
}
查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net的更多相关文章
- 浅谈利用PLSQL的多线程处理机制,加快处理大数据表的效率
我们在处理大数据表的时候经常会感觉的处理速度不够快,效率不够高,那么今天下面我就来简单实现下PLSQL的多线程编程处理数据: 我模拟一个简单的场景,把某一张表中的数据(当然这张表的数据非常大)同步到目 ...
- WinForm查询大数据界面假死,使用异步调用解决
用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...
- 3dTiles 数据规范详解[3] 内嵌在瓦片文件中的两大数据表
转载请声明出处:全网@秋意正寒 零.本篇前言 说实话,我很纠结是先介绍瓦片的二进制数据文件结构,还是先介绍这两个重要的表.思前想后,我决定还是先介绍这两个数据表. 因为这两个表不先给读者灌输,那么介绍 ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串
应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select 逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_ ...
- 【MySQL】MySQL中查询出数据表中存在重复的值list
1.目的:查询MySQL数据表中,重复记录的值 2.示例: 3.代码: select serial_num,count(*) as count FROM card_ticket GROUP BY se ...
- Oracle大数据表的分表处理
1.首先给大数据表创建rownum序列号 --增加序列号字段 alter table TEST add xlh number; --填充序列号 update TEST set xlh = rownum ...
- 在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析
在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的.通用的Hadoop兼容Azure存储解决方式无缝集成HDInsight.通过Hadoop分布式 ...
- Oracle使用游标查询所有数据表备注
功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...
随机推荐
- syslog之三:建立Windows下面的syslog日志服务器
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- MAC EI Capitan上更新系统自带SVN版本号(关闭SIP方能sudo rm)
继昨晚之后.决定更新系统自带的svn.自带的svn版本号是1.7.看官网svn:http://www.wandisco.com/subversion/download#osx 最新版本号是1.9.13 ...
- intellij IDEA 安装和配置和使用
下载:https://www.jetbrains.com/idea/download/download-thanks.html?platform=windows 安装教程:https://blog.c ...
- Django-基础-2-ORM
参考文章: http://www.cnblogs.com/haiyan123/p/7732190.html https://www.cnblogs.com/liuqingzheng/articles/ ...
- php手册总结《类》
手册页面: http://php.net/manual/zh/language.oop5.basic.php >> 类名 类名可以是任何非 PHP 保留字的合法标签.一个合法类名以字母或下 ...
- IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践
说到ios的应用开发,我们不能不提到web server服务端,如果没有服务端的支持,ios应用开发就没有多大意义了,因为从事过手机开发的朋友都知道(Android也一样),大量复杂业务的处理和数据库 ...
- ssh的tunnel隧道打洞
分正向和反向. 假设,本地机器可以ssh连上远程机器.本地机器在下面叫做SSHClient, 远程机器叫做SSHServer. 一. 正向代理(本地转发) 在SSHClient机上执行: : SSHS ...
- linux每日命令(14):less命令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...
- linux下为目录和文件设置权限
摘:linux下为目录和文件设置权限 分类: Linux2012-05-09 03:18 7456人阅读 评论(1) 收藏 举报 linuxwordpressweb数据库serverfile linu ...
- ambari安装 QA
1.在安装时 出现Public key for ambari-server-2.4.2.0-136.x86_64.rpm is not installed 安装ambari报错 在安装HST服务时也报 ...