답변 감사드립니다.
우선 게시판이 돌아가게는 만들었습니다.
똑같은 알고리즘으로 만들었는데 확실히 mysql이 빠르던군요....
현재 게시물 3만건을 넣었거든요...
페이징 속도가 뒤로가면 늦어져요
어떻게 해결할 수 있는 방법이 없을까요?
로딩속도는 첫페이지는 0.00908정도 나오고 마지막은 1.25589정도 나오거든요
현재 이 결과로 속도는 제대로 나오고 있는건가요
실행 쿼리는 아래와 같습니다.
첫페이지 : select no,num,depth,idx,name,email,subject,refer,down,filename,filesize,date from test order by idx DESC limit 10 offset 0
마지막페이지
select no,num,depth,idx,name,email,subject,refer,down,filename,filesize,date from test order by idx DESC limit 2 offset 30000
디비 구조는 아래와 같습니다.
CREATE TABLE "test" (
"no" int4 DEFAULT nextval('"test_no_seq"'::text) NOT NULL,
"num" int8,
"depth" int8,
"idx" int8,
"name" varchar(20),
"email" varchar(40),
"subject" varchar(100),
"content" text,
"passwd" varchar(20),
"url" varchar(100),
"host" varchar(15),
"html" char(1),
"reply_mail" char(1),
"refer" int4,
"down" int4,
"filename" varchar(100),
"filesize" int8,
"date" int8,
CONSTRAINT "test_pkey" PRIMARY KEY ("no")
);
CREATE INDEX "idx_test_key" ON "test" ("idx");
답변 부탁드립니다.
마지막으로 크리스마스 잘 보내세요
-- 소똥 님이 쓰신 글:
>> UPDATE,INSERT등은 따로 LOCK을 걸지않아도 내부적으로 자동 row exclusive lock인가가 걸리는데 ...
>>
>> 하나의 트랜잭션안에서만 의미가 있음니다.
>>
>> mysql처럼 트랜젝션 개념이 없는DB( 맞나? ) 에선 다짜고짜 통으로 lock을 걸어버리는데 이건 db가 실제 처리하지 않는 시간도 lock이 걸려 있으므로 다른세션에선 그기간동안 접근수 없죠.
>>
>> 아래의 경우처럼 한문장만 할경우라면 lock이 아무 의미가 없고 여러개의 문을 트랜잭션 처리할경우만 필요한 옵션으로 lock을 시키시면 될거라봄니다.
>>
>> mysql의 unlock과 같은 기능은 필요가 없음니다.
>> 트랜잭션이 끝나면 자동으로 lock이 해제 될태니까요.
>>
>> 근데 죄송하지만 정확한 답변인지는 저도잘...
>>
>>
>> -- 전병혁 님이 쓰신 글:
>> >> 답변 감사합니다.
>> >> mysql처럼 lock를 걸면 어떻게 코딩을 해야 하나요?
>> >> 메뉴얼을 보아도 잘 모르겠네요
>> >>
>> >> postgres=# \h lock
>> >> Command: LOCK
>> >> Description: explicitly lock a table
>> >> Syntax:
>> >> LOCK [ TABLE ] name [, ...]
>> >> LOCK [ TABLE ] name [, ...] IN lockmode MODE
>> >>
>> >> where lockmode is one of:
>> >>
>> >> ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE |
>> >> SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
>> >>
>> >> 이게 무슨소린지?
>> >> 다시 한번 답변부탁드립니다.
>> >>
>> >>
>> >> -- 소똥 님이 쓰신 글:
>> >> >> SQL문 하나 하나는 그자체로 트랜젝션이 되므로 아래처럼 begin,rollback등를 쓰실필요는 없고 안되는 증상을 잘모르겠지만 mysql처럼 lock을 걸면 안될까요?
>> >> >>
>> >> >> -- 전병혁 님이 쓰신 글:
>> >> >> >> 이곳을 통해 많은 것을 배우고 있는 사람입니다.
>> >> >> >>
>> >> >> >> mysql을 사용하다가 pgsql을 설치해서 짐 공부를 하고 있습니다.
>> >> >> >>
>> >> >> >> 게시판을 만들고 있는데 mysql에서 트랜잭션(?)을 어떻게 pgsql로 변경을
>> >> >> >>
>> >> >> >> 해야 하는지요...
>> >> >> >>
>> >> >> >> 게시판 알고리즘은 업데이트형 게시판입니다.
>> >> >> >>
>> >> >> >> idx라는 필드가 바로 업데이트되는 필드입니다.
>> >> >> >>
>> >> >> >> 물론 데이터가 많아지면 문제는 됩니다.
>> >> >> >>
>> >> >> >> mysql로 된 소스 올립니다(답변글을 작성했을때 입니다.).
>> >> >> >>
>> >> >> >> mysql_query("lock table $table write",$conn);
>> >> >> >> $result = mysql_query("update $table set idx=idx+1 where idx>=$re_idx",$conn);
>> >> >> >> mysql_query("unlock table",$conn);
>> >> >> >>
>> >> >> >> 위의 소스를 pgsql로 변경을 하면 어떻게 해야하나요?
>> >> >> >>
>> >> >> >> 제가 구현한 방법은 아래와 같습니다. 그런데 안되던데요
>> >> >> >>
>> >> >> >> pg_exec($conn,"begin");
>> >> >> >> $result = pg_exec($conn,"update $table set idx=idx+1 where idx>=$re_idx");
>> >> >> >> if($result) pg_exec($conn,"commit");
>> >> >> >> else pg_exec($conn,"rollback");
>> >> >> >>
>> >> >> >> by 전병혁 (chunbh)
|