게시판 제작 속도 측정을 위해 임의도 동일 데이터 5만건 미만으로 넣어서 테스트를 해봤습니다.
CREATE TABLE [dbo].[IBIZ_MBOARD]( -- 5만건 데이터 삽입
[Seq] [int] IDENTITY(1,1) NOT NULL,
[Division] [nvarchar](100) NOT NULL,
[Subject] [nvarchar](1000) NOT NULL,
[Message] [ntext] NOT NULL,
[ViewID] [nvarchar](100) NULL,
[MemID] [nvarchar](100) NOT NULL,
[MemPW] [nvarchar](100) NULL,
[MemName] [nvarchar](100) NOT NULL,
[Tags] [nvarchar](1000) NULL,
[PFile] [nvarchar](1000) NULL,
[PostDate] [datetime] NOT NULL,
[ReadCnt] [int] NULL,
[IsNotice] [nvarchar](10) NULL,
[IsSecret] [nvarchar](10) NULL,
[IPAddr] [nvarchar](20) NOT NULL,
[EditDate] [datetime] NULL,
[MozipID] [nvarchar](50) NULL,
[AcademyID] [nvarchar](50) NULL,
[BranchCD] [nvarchar](10) NOT NULL,
[CompanyCD] [nvarchar](10) NOT NULL DEFAULT (N'ALL'),
[SuperCD] [nvarchar](10) NOT NULL DEFAULT (N'CS'),
CONSTRAINT [PK_IBIZ_MBOARD] PRIMARY KEY CLUSTERED
(
[Seq] ASC,
[Division] ASC,
[SuperCD] ASC,
)
)
CREATE TABLE [dbo].[IBIZ_MBOARD_REPLY]( -- 데이터 없음
[Seq] [int] IDENTITY(1,1) NOT NULL,
[ReSeq] [int] NOT NULL,
[ReDivision] [nvarchar](100) NOT NULL,
[ReSubject] [nvarchar](1000) NOT NULL,
[ReMessage] [ntext] NOT NULL,
[ReMemID] [nvarchar](100) NULL,
[ReMemName] [nvarchar](100) NULL,
[RePostDate] [datetime] NOT NULL,
[ReIsSecret] [nvarchar](10) NULL,
[ReIPAddr] [nvarchar](20) NOT NULL,
[SuperCD] [nvarchar](10) NOT NULL DEFAULT (N'CS'),
CONSTRAINT [PK_IBIZ_MBOARD_REPLY] PRIMARY KEY CLUSTERED
(
[Seq] ASC
[ReDivision] ASC,
[SuperCD] ASC,
)
)
mssql 에서 직접 쿼리 했을경우 select * from dbo.IBIZ_MBOARD 5만건 20초 가량 걸렸습니다.
이정도 수치가 맞는지요 더 빨라지는 방법은 없을까요?
----------------ASP 에서 코드 실행시
SQL=" SELECT a.Seq,a.Division,a.Subject,a.ViewID,a.MemID,a.MemName,a.PFile,a.PostDate,a.ReadCnt,a.IsNotice,a.IsSecret,a.CompanyCD "
SQL=SQL&" ,(SELECT COUNT(*) FROM IBIZ_MBOARD_REPLY WHERE ReSeq=a.Seq AND ReDivision=a.Division ) As ReCnt "
SQL=SQL&" FROM IBIZ_MBOARD AS a "
SQL=SQL&" WHERE a.Division='"&Division&"' "
SQL=SQL&" ORDER BY a.IsNotice DESC,a.PostDate DESC,a.Seq DESC "
Set Rs=Server.CreateObject("ADODB.recordset")
Rs.Open sql,DbCon,1
Rs.PageSize=15
15개 페이징 시 3초 내외가 걸리더라구요
서브 셀렉트를 빼면 2초 정도 걸리구요 (SELECT COUNT(*) FROM IBIZ_MBOARD_REPLY WHERE ReSeq=a.Seq AND ReDivision=a.Division ) As ReCnt
그래서 Set Rs=DbCon.Execute(SQL) 로 퀴리를 날렸을때는 1초 내외로 걸립니다.
단 총 갯수를 못구해서 사용에 어려움이 있었서 못쓰구요 ASP 코드 등 기타
선배님들 좋은 방법이 있나요?
index 를 사용하면 된다는데 어떻게 사용을 해야할지요.?
Comment 1
-
항해자™
2013.12.19 00:45
게시판 메인에 반드시 쓰이는 컬럼과 상세 페이지를 보여줄 때 쓰이는 컬럼을 나눠서 분리하세요,,
마지막 페이지를 표현할꺼 아니면 count(*) 은 필요 없습니다,,
한 블럭 크기 +1 만큼만 읽으면 다음 블럭이 있다는 것을 알수 있습니다,,
그러면 읽을 때는 딱 한 페이지 분량 만큼만 읽으면 되겠네요,,,