原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
系列目录
我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能!
服务器
现在来向SQL2008R2插入1000000条数据吧
declare @i int; set @i=0; while @i<1000000 begin INSERT 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; end select 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 ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[P_MIS_Info_GetICanManage] @WhereSQL varchar(1024), @Rows int=15, --每页有几条 @PageNo int=1,--页码 @RowsCount int out as begin CREATE 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)))+' )' end print @sql exec (@sql) SELECT [Id] ,[ChannelId] ,[CategoryId] ,[Title] ,[ImgUrl] ,[BodyContent] ,[Sort] ,[Click] ,[CheckFlag] ,[Checker] ,[CheckDateTime] ,[Creater] ,[CreateTime] from #Art
数据查询数据:也许受到字段列个数,字段类型,服务器处理能力,在线人数等影响,但这里的数据足以说明查询百万级的数据已经问题不大。
在此说明一个问题,MVC+EF可以在很多中大型的系统中运用,而且变得越来越简单,让人能把关注点多放在业务方面!
时间: 2024-10-13 09:19:15