개발人

100만건을 대상으로 테스트를 해 보았습니다. 본문

Classic ASP

100만건을 대상으로 테스트를 해 보았습니다.

NJHouse 2015. 5. 24. 14:20
반응형
전체 게시판 목록을 100만건을 대상으로 테스트를 해 보았습니다.

1. select * from BBS_T 후에 프로그램에서 cursor fetch를 사용하는 방법
2. select top 게시물 숫자 from BBS_T 를 이용하는 방법

1번과 2번은 상당히 큰 속도의 차이를 보입니다.

이유는 resultset 의 객체를 얻을때 이미 모든 자료를 가지고 오기에

Databaes에서 자료를 가지고 올때 원하는 부분만 filtering에서 자료를 가지고 오는 것이

훨씬 속도면에서 탁월함을 느낄 수 있더군요.

이와 같은 특징을 살려서 만든 sp_bbs_list 입니다.

-- Table 생성

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[NORM_BBS_T]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[NORM_BBS_T]
GO

CREATE TABLE [dbo].[NORM_BBS_T] (
[NO] [int] IDENTITY (1, 1) NOT NULL ,
[ID] [varchar] (10) COLLATE Korean_Wansung_CI_AS NULL ,
[NAME] [varchar] (10) COLLATE Korean_Wansung_CI_AS NULL ,
[EMAIL] [varchar] (100) COLLATE Korean_Wansung_CI_AS NULL ,
[SUBJECT] [varchar] (100) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[CONTENT] [text] COLLATE Korean_Wansung_CI_AS NOT NULL ,
[REGI_DATE] [smalldatetime] NOT NULL ,
[IP] [varchar] (15) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[CNT] [int] NOT NULL ,
[GROUP_ID] [int] NOT NULL ,
[GROUP_ORDER] [int] NOT NULL ,
[DEPTH] [int] NOT NULL ,
[PWD] [varchar] (10) COLLATE Korean_Wansung_CI_AS NULL ,
[HTML_F] [char] (1) COLLATE Korean_Wansung_CI_AS NULL ,
[SHOW_F] [char] (1) COLLATE Korean_Wansung_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


-- sp_bbs_list

*
게시판 리스트꺼내기(답변)
  pagesize : 한번에보여줄게시판리스트수
  GotoPage :현재페이지
  recordcount : 전체 레코드 수
  tbn:테이블이름
where: where 절
*/
CREATE PROCEDURE dbo.sp_bbs_list
@pagesize varchar(3),
@GotoPage varchar(8),
@recordcnt varchar(8),
@tbn varchar(20),
@where varchar(200)
AS
begin
declare @sql  varchar(2000),  @num varchar(8),@total varchar(8)
if cast(@recordcnt as int) > cast(@gotopage as int)*cast(@pagesize as int)
set @total=@pagesize
else
set @total=cast(cast(@recordcnt as int)-(cast(@gotopage as int)-1)*cast
                   (@pagesize as int) as varchar(8))
set @num=cast(cast(@gotopage as int)*cast(@pagesize as int) as varchar(8))
set @sql='
SELECT 
NO,ID,NAME,EMAIL,SUBJECT,'''' AS CONTENT,REGI_DATE,IP,CNT,
GROUP_ID,DEPTH,GROUP_ORDER,PWD,HTML_F,SHOW_F From
(
SELECT Top '+@total +'  * FROM ( Select Top '+@num +'  * From ' + @tbn + ' ' + @where
+  ' ORDER BY GROUP_ID DESC, GROUP_ORDER ASC  )  a '
+ @where + ' ORDER BY GROUP_ID ASC, GROUP_ORDER DESC   )  a '+@where
+ ' ORDER BY GROUP_ID DESC, GROUP_ORDER ASC '
exec(@sql)
         
end
GO


-- 실행

Query Analyzer에서


exec sp_bbs_list '10','2','1000','NORM_BBS_T',''


한번씩 모두 분석해 보세요.

(추가)
한가지 빠져서 추가합니다.

100만건을 입력하는 것은 힘들져 이때 T_SQL 을 이용하면 됩니다.

그런데 100만건은 진짜 시간 많이 걸릴 겁니다.. 한 10만건~20만건 정도로 하심이... ㅋㅋ

쿼리 Analyzer 에서 아래 라인을 실행합니다.

set nocount on
declare @i int
set @i = 1

while @i < 1000000
begin
INSERT INTO NORM_BBS_T
(ID,NAME,EMAIL,SUBJECT,CONTENT,REGI_DATE,IP,CNT,GROUP_ID,DEPTH,
GROUP_ORDER,PWD,HTML_F,SHOW_F) VALUES
('kingches','왕장기','kingches@dddd.com','제목이당.. ㅋㅋㅋㅋ' + str(@i),'내용이당 ㅋㅋㅋ 나두몰라',
getdate(), '11.111.111.11',0,@i, 0, 0, '1111','0','1')
set @i = @i + 1
end
go

그럼..



반응형
Comments