首页 > 代码库 > 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能!

服务器

现在来向SQL2008R2插入1000000条数据吧

declare @i int;set @i=0;while @i<1000000beginINSERT INTO [AppDB].[dbo].[MIS_Article]           ([Id]           ,[ChannelId]           ,[CategoryId]           ,[Title]           ,[ImgUrl]           ,[BodyContent]           ,[Sort]           ,[Click]           ,[CheckFlag]           ,[Checker]           ,[CheckDateTime]           ,[Creater]           ,[CreateTime])     VALUES           (CONVERT(varchar,@i)           ,0           ,001001           ,这是第+ CONVERT(varchar,@i)           ,‘‘           ,这是第+ CONVERT(varchar,@i)+条测试记录           ,0           ,122           ,1           ,admin           ,2014-5-1           ,admin           ,2014-5-1)   set @i = @i+1;endselect COUNT(*) from dbo.MIS_Article

我发现我之前的理解是错的。不用存储过程,跟踪EF生成的LINQ成果是理想了,在Easyui下的分页显示也是2秒左右,如图的分页

在这里我只能把数据量加大到一千万,在EF中,我们可能无必要用存储过程来做列表的显示,因为生成的查询语句是非常理想的。

现在数据已经到达300W+了,查询分页的时间小于4秒

当数据达到六百万条记录的时候事件已经在6秒左右了,可能我的服务器处理能力有限。配置有点差

所以当你的数据到达一千万的时候,你需要更换更好的服务器,不能再纠结于存储过程,和程序的性能了,因为程序就TM的这样写了,还能怎么样!

大家可以转到http://www.woaitun.com/测试 帐号密码admin admin123,信息频道管理-------信息中心--------管理中心

但这里还是放出存储过程!效果却是一样的,有兴趣的可以了解一下这个分页存储过程

USE [AppDB]GO/****** Object:  StoredProcedure [dbo].[P_MIS_Info_GetICanManage]    Script Date: 06/16/2014 09:58:32 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER proc [dbo].[P_MIS_Info_GetICanManage]@WhereSQL varchar(1024),@Rows int=15, --每页有几条@PageNo int=1,--页码@RowsCount int outasbeginCREATE TABLE #Art(        [Id] [varchar](50) NOT NULL,    [ChannelId] [int] NOT NULL,    [CategoryId] [varchar](50) NOT NULL,    [Title] [varchar](100) NOT NULL,    [ImgUrl] [varchar](255) NULL,    [BodyContent] [varchar](8000) NULL,    [Sort] [int] NULL,    [Click] [int] NULL,    [CheckFlag] [int] NOT NULL,    [Checker] [varchar](50) NULL,    [CheckDateTime] [datetime] NULL,    [Creater] [varchar](50) NULL,    [CreateTime] [datetime] NULL,)--获取总记录数Create table #CountTable(    Id varchar(50))exec(insert into #CountTable select distinct b.Id from  MIS_Article as b where 1=1 +@WhereSQL+ )select @RowsCount=COUNT(*) from #CountTable--获取管理的帖子declare @sql varchar(1024)set @sql =insert into #Art select top (+CONVERT(varchar,@Rows)+) [Id]           ,[ChannelId]           ,[CategoryId]           ,[Title]           ,[ImgUrl]           ,[BodyContent]           ,[Sort]           ,[Click]           ,[CheckFlag]           ,[Checker]           ,[CheckDateTime]           ,[Creater]           ,[CreateTime] from MIS_Article where Id in( + select b.Id from( select distinct b.Id,row_number() over (order by b.CreateTime desc) as [row_number] from + MIS_Article as b where 1=1 +@WhereSQL+) as b where + b.[row_number] >+CONVERT(varchar,(@Rows*(@PageNo-1)))+ )endprint @sqlexec (@sql)SELECT [Id]           ,[ChannelId]           ,[CategoryId]           ,[Title]           ,[ImgUrl]           ,[BodyContent]           ,[Sort]           ,[Click]           ,[CheckFlag]           ,[Checker]           ,[CheckDateTime]           ,[Creater]           ,[CreateTime] from #Art        

数据查询数据:也许受到字段列个数,字段类型,服务器处理能力,在线人数等影响,但这里的数据足以说明查询百万级的数据已经问题不大。

在此说明一个问题,MVC+EF可以在很多中大型的系统中运用,而且变得越来越简单,让人能把关注点多放在业务方面!