ASP.NET MVC5+EF6+EasyUI 后台管理系統(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可以在很多中大型的系統中運用,而且變得越來越簡單,讓人能把關注點多放在業務方面!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM