database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 4117 게시물 읽기
No. 4117
게시판에서의 전체 글개수 구하기가...
작성자
전병혁(chunbh)
작성일
2002-04-02 09:22
조회수
1,710

현재 시스템 사양입니다.

 

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);

 

어떻게 하면 전체 글 구하는 속도를 빠르게 할 수 있나요

이 글에 대한 댓글이 총 1건 있습니다.

문제가 될 경우 sequence 번호를 읽어서 사용하면 되지 않을까요.

정재익(advance)님이 2002-04-03 10:54에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4121RH7.2 + postgresql 7.2 [1]
배재한
2002-04-03
1393
4119한머신에 두개의 포스트그레서를 뛰우는게 가능한가요
우즈리
2002-04-02
1148
4122┕>Re: 한머신에 두개의 포스트그레서를 뛰우는게 가능한가요
정재익
2002-04-03 10:53:15
1368
4118Performance 부분...급함 [1]
홍길동
2002-04-02
1180
4117게시판에서의 전체 글개수 구하기가... [1]
전병혁
2002-04-02
1710
4123┕>Re: 다시 한번만 봐주세요..
전병혁
2002-04-03 11:20:41
1388
4115permission deny [6]
노인철
2002-03-30
1682
4112속도... [3]
사이버
2002-03-28
1360
4113┕>Re: 속도...(임시 해결인가??) [1]
사이버
2002-03-28 14:39:14
1193
4114┕>Re: 속도... [1]
김순석
2002-03-28 16:31:37
1344
4110백업시 pg_dump를 Cron에서 가동하면 않되는 이유 좀..
momzi
2002-03-27
789
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다