查询大数据表的效率对比: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 ...
随机推荐
- [Android实例] Activity实例StartActivity出现NullPointer异常
[Android实例] Activity实例StartActivity出现NullPointer异常 [android实例教程] 在Android低版本(如2.3.3)中出现如下“界面跳转”的错误: ...
- [ci]jenkins server启动,通过jnlp的方式启动slave(容器模式)
jenkins server启动,通过jnlp的方式启动slave. java -jar jenkins.jar 配置jnlp端口--全局安全 配置云 配置项目 执行成功
- sublime text 3 安装卸载插件和取消启动检查更新
1.Perferences->Package Contro,输入install 调出 Install Package 选项并回车 2.安装相应的插件 2.点击首选项–设置(用户) 3.卸载插件 ...
- Mycat源码中的单例模式
在MyCat的源码中,很多对象都使用到了单例模式. 首先是MycatServer类,该实例必须全局唯一,所以这里涉及到JAVA的单实例模式,就是一个类只有唯一一个实例对象存在.先来看看mycat源码是 ...
- 【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯
实验原理: STM32的定时器有PWM功能,iCore4的蓝色LED连接在定时器的输出接口上, 可以通过定时器的PWM输出控制LED的亮度,从而实验呼吸灯的功能. 核心代码: int main(voi ...
- javascript and jquery 代码块
1.5秒隐藏 (setTimeout ) setTimeout( function(){ $('.ad_midd').slideUp(); } , 5000 )
- Ruby学习小记
ruby安装 方法一:使用apt-get安装 可以直接使用两个命令完成Ruby的安装. # sudo apt-get update # sudo apt-get install ruby 或者 # s ...
- shell-跳板机便捷增加用户及设置密码
我的需求: 因网络限制,某些客户机ssh到服务器都得使用跳板机进行转一下,每次帮开帐户,不麻烦不难,但总觉得还可以再优. 不多说,直接放shell.很简单 #!/bin/bash #test add ...
- [IR] Bigtable: A Distributed Storage System for Semi-Structured Data
良心博文: http://blog.csdn.net/opennaive/article/details/7532589 这里只是基础简述 众人说: 链接:http://blog.csdn.net/o ...
- SpringBoot(十七)-- 定时任务
日常开发中,经常会使用定时任务来执行跑批,springboot默认已经帮助我们整合了定时任务. 参考:https://blog.csdn.net/u013845177/article/details/ ...