sequence 번호를 읽는 다고 전체 글의 개수를 알 수 있는지요?
또다른 서버에서 테스트 했지만 select count(no) from test 수행하는 속도가 확실이 느리고 리스트 출력하는 것도 느립니다.
재익님께서는 어떻게 사용을 하시는지요?
속도를 높이기 위해 전체카운터를 다른 테이블에 저장하는 방법도 있겠지만 이 방법은 나중에 생각하려고 합니다.
설치에 문제가 있는지 아님 제가 플밍을 잘못했는지요?
카운터구하는것과 리스트 출력하는 쿼리(limit x offset y)에 문제가 있는지 확인 부탁드립니다.
그리고 재익님께서 사용하시는 방법은 어떤지요..
ㅡ.ㅡ
좋은 하루 되시기 바랍니다.
-- 전병혁 님이 쓰신 글:
>> 현재 시스템 사양입니다.
>>
>> OS : x86 솔라리스 8
>> cpu : 펜3 667Mhz
>> mem : 512mb
>> 하드는 일반 ide하드 입니다.
>>
>> apache 1.3.24, php-4.1.2, pgsql 7.2입니다.
>>
>> 이 시스템에는 오라클과 mysql도 설치되어 있습니다.
>>
>> 게시판을 만들었는데 select count(*) from table_name 이거 하는데 무려 12초나 걸립니다.
>>
>> 데이터는 15만건 들어가 있습니다.
>>
>> 답변형 게시판의 db구조는 아래와 같습니다.
>>
>> CREATE SEQUENCE "test_no_seq" start 1 increment 1 maxvalue 9223372036854775807 minvalue 1 cache 1;
>>
>> CREATE TABLE "test" (
>> "no" integer DEFAULT nextval('"test_no_seq"'::text) NOT NULL,
>> "idx" integer,
>> "thread" varchar(255),
>> "name" character varying(20),
>> "email" character varying(40),
>> "subject" character varying(100),
>> "content" text,
>> "passwd" character varying(20),
>> "url" character varying(100),
>> "host" character varying(15),
>> "html" character(1),
>> "reply_mail" character(1),
>> "refer" integer,
>> "down" integer,
>> "filename" character varying(100),
>> "filesize" integer,
>> "wdate" integer,
>> Constraint "test_pkey" Primary Key ("no")
>> );
>>
>> CREATE INDEX pos_test_key ON test USING btree (idx, thread);
>>
>> SELECT setval ('"test_no_seq"', 1, false);
>>
>> 위와 같이 만들었습니다.
>>
>> explain의 결과 입니다.
>> postgres=# explain select count(*) from test;
>> NOTICE: QUERY PLAN:
>>
>> Aggregate (cost=6422.15..6422.15 rows=1 width=0)
>> -> Seq Scan on test (cost=0.00..6047.12 rows=150012 width=0)
>>
>> EXPLAIN
>> postgres=# explain select count(no) from test;
>> NOTICE: QUERY PLAN:
>>
>> Aggregate (cost=6422.15..6422.15 rows=1 width=4)
>> -> Seq Scan on test (cost=0.00..6047.12 rows=150012 width=4)
>>
>> EXPLAIN
>> postgres=# explain select count(idx) from test;
>> NOTICE: QUERY PLAN:
>>
>> Aggregate (cost=6422.15..6422.15 rows=1 width=4)
>> -> Seq Scan on test (cost=0.00..6047.12 rows=150012 width=4)
>>
>> 문제는 다른 db의 경우 count(*) 이렇게 하면 데이터가 많아도 금방 되던데
>>
>> 왜 이렇게 느린리 모르겠네요..
>>
>> 아래는 mysql의 경우 입니다.
>>
>> mysql> select count(*) from test;
>> +----------+
>> | count(*) |
>> +----------+
>> | 150004 |
>> +----------+
>> 1 row in set (0.00 sec)
>>
>> mysql> select count(no) from test;
>> +-----------+
>> | count(no) |
>> +-----------+
>> | 150004 |
>> +-----------+
>> 1 row in set (0.00 sec)
>>
>> php에서 사용한 전체 글 구하는 소스입니다.
>>
>> $query = "select count(no) from $table" . $sql;
>> $result = pg_exec($conn,$query);
>> if($result){
>> // 게시물 총개수를 $TotalCount에 저장합니다.
>> $TotalCount = pg_fetch_row($result);
>> $TotalCount = $TotalCount[0];
>> }
>> // 게시물이 없으면 0
>> else $TotalCount = 0;
>> pg_freeresult($result);
>>
>> 어떻게 하면 전체 글 구하는 속도를 빠르게 할 수 있나요
|