현재 시스템 사양입니다.
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);
어떻게 하면 전체 글 구하는 속도를 빠르게 할 수 있나요
|