본 게시판의 장점은

"게시물의 갯수와 상관없이 (DB용량이 받쳐주는대로) 페이징/페이지 검색 속도가 동일하다는 것"입니다.


대신 단점은

1. 오래된 게시물의 답변 글을 쓸 경우에는 timeout 이 발생할 수 있다.

2. 삭제시 레코드를 직접 삭제하는 방법보다는 "xxx에 의해 삭제되었다.."라는 형태를 쓰는 것을 권장한다.


1번같은 경우는 먼저도 말했지만

게시판이라는것이 주로 테이블의 윗부분(최근글)에서 빈번한 삽입과 답변이 이루어지는 것을 감안하였을 때

심각하게 고려할 만한 사항은 아니라고 봅니다. 아무리 중간에 삽입하는 것이 느리더라도

테스트해보시면 아시겠지만, 100페이지 정도에서 답변글을 달아도 느리다는 느낌을 전혀 주지 않습니다.


그럼... 설명에 앞서 준비를 하겠습니다.

두 개의 소스를 준비하였습니다. QA에서 실행시키면 될 것입니다.


*************************************************************************

1. 테이블 (편의상 [t3]이라는 테이블로 작성하였습니다.

*************************************************************************

/****** Object:  Table [dbo].[t3]    Script Date: 2003-07-19 오전 12:37:23 ******/

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

drop table [dbo].[t3]

GO


/****** Object:  Table [dbo].[t3]    Script Date: 2003-07-19 오전 12:37:23 ******/

CREATE TABLE [dbo].[t3] (

    [seq] [int] IDENTITY (1, 1) NOT NULL ,

    [ref] [int] NOT NULL ,

    [depth] [smallint] NOT NULL ,

    [name] [varchar] (20) COLLATE Korean_Wansung_CI_AS NOT NULL ,

    [email] [varchar] (50) COLLATE Korean_Wansung_CI_AS NULL ,

    [password] [varchar] (16) COLLATE Korean_Wansung_CI_AS NOT NULL ,

    [title] [varchar] (100) COLLATE Korean_Wansung_CI_AS NOT NULL ,

    [writeday] [datetime] NOT NULL ,

    [readnum] [smallint] NOT NULL ,

    [ip] [varchar] (15) COLLATE Korean_Wansung_CI_AS NOT NULL ,

    [content] [text] COLLATE Korean_Wansung_CI_AS NOT NULL

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO


ALTER TABLE [dbo].[t3] WITH NOCHECK ADD

    CONSTRAINT [PK_t3] PRIMARY KEY  CLUSTERED

    (

        [seq] DESC

    )  ON [PRIMARY]

GO


ALTER TABLE [dbo].[t3] ADD

    CONSTRAINT [DF_t3_depth] DEFAULT (0) FOR [depth],

    CONSTRAINT [DF_t3_writeday] DEFAULT (getdate()) FOR [writeday],

    CONSTRAINT [DF_t3_readcount] DEFAULT (0) FOR [readnum]

GO


 CREATE  INDEX [IX_t3] ON [dbo].[t3]([ref] DESC ) ON [PRIMARY]

GO



*************************************************************************

2. 데이터 입력

*************************************************************************


set nocount on

--변수 선언

declare @name varchar(20)

declare @email varchar(50)

declare @password varchar(20)

declare @title varchar(100)

declare @ip varchar(15)

declare @content varchar(200)

--루프용변수

declare @iCount int

--초기화

set @name = '이성근'

set @email = 'rainn@rainn.pe.kr'

set @password = 'abcdefg'

set @ip = '127.0.0.1'


select @iCount = max(seq) from t3


set @iCount = @iCount + 1

while (@iCount <= 1000000)           -- 이 조건문에 1,000,000 을 주면 100만개의 레코드를 만듭니다.

    begin

        set @title = cast(@iCount as varchar) + ' 번째 글입니다.'

        set @content = cast(@iCount as varchar) + ' 번째 글의 내용입니다.'


        insert into t3 (ref, name, email, password, title, ip, content) values (@iCount, @name, @email,@password, @title, @ip, @content)

        set @iCount = @iCount + 1

    end




이하 설명은 다음 강좌에서 하겠습니다. ^^*

집어치우라고 돌던지셔도 좋습니다 ^^;;



===============================

이성근 (rainn@rainn.pe.kr)

SoongSil Univ.95

===============================

+ Recent posts