ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

来源:互联网 发布:单片机wcmd是什么 编辑:程序博客网 时间:2024/06/01 10:18
系列目录

我想测试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可以在很多中大型的系统中运用,而且变得越来越简单,让人能把关注点多放在业务方面!

 

 

 

 

阅读全文
0 0
原创粉丝点击