我想測試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可以在很多中大型的系統中運用,而且變得越來越簡單,讓人能把關注點多放在業務方面!