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
운영게시판
최근게시물
MySQL Q&A 28207 게시물 읽기
No. 28207
쿼리 속도가 너무 느립니다.
작성자
신토
작성일
2009-05-12 14:20
조회수
6,432

테이블 구조

 

<구독 테이블>

CREATE TABLE `m_appmaga` (

`id` int(10) unsigned NOT NULL auto_increment,

`sid` int(10) unsigned NOT NULL default '0',

`mid` int(10) unsigned NOT NULL default '0',

`flag` tinyint(1) unsigned NOT NULL default '0',

`insert_time` datetime NOT NULL default '0000-00-00 00:00:00',

`update_time` timestamp(14) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `sid` (`sid`,`mid`)

KEY `mid` (`mid`)

) TYPE=MyISAM

 

<매거진 테이블>

CREATE TABLE `m_magazine` (

`id` int(10) unsigned NOT NULL auto_increment,

`pid` int(10) unsigned NOT NULL default '0',

`cate` int(5) unsigned NOT NULL default '0',

`name` varchar(128) NOT NULL default '',

`comment` text,

`back` tinyint(1) unsigned NOT NULL default '0',

`url` varchar(250) default NULL,

`carrier_flag` tinyint(1) unsigned NOT NULL default '0',

`cycle` tinyint(1) unsigned NOT NULL default '0',

`flag` tinyint(3) unsigned NOT NULL default '0',

`insert_time` datetime NOT NULL default '0000-00-00 00:00:00',

`update_time` timestamp(14) NOT NULL,

PRIMARY KEY (`id`),

KEY `pid` (`pid`)

) TYPE=MyISAM

 

<발행자 테이블>

CREATE TABLE `m_publisher` (

`id` int(10) unsigned NOT NULL auto_increment,

`mail` varchar(128) NOT NULL default '',

`name` varchar(128) NOT NULL default '',

`pass` varchar(16) NOT NULL default '',

`utn` varchar(128) default NULL,

`carrier` tinyint(3) unsigned NOT NULL default '0',

`flag` tinyint(3) unsigned NOT NULL default '0',

`notice` tinyint(1) unsigned NOT NULL default '1',

`insert_time` datetime NOT NULL default '0000-00-00 00:00:00',

`update_time` timestamp(14) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `utn` (`utn`),

KEY `mail` (`mail`)

) TYPE=MyISAM

 

 

m_appmaga(구독테이블) - 약 60만개

m_magazine(매거진테이블) - 약 2만개

m_publisher(발행자테이블) - 약 1만1천개

 

 

SELECT

a.*, count(a.mid) as count, m.*

FROM

m_appmaga a

LEFT JOIN

m_magazine m ON a.mid = m.id

LEFT JOIN

m_publisher p ON m.pid = p.id

WHERE

a.flag = 1 AND m.flag = 1 AND p.flag = 1

GROUP BY

a.mid

ORDER BY

count

DESC LIMIT 1, 30;

 

유효 발행자의 발행중의 매거진을 구독하는 구독자 수를 주출하는 쿼리입니다.

그런데 속도가 약 10초 이상 걸립니다..

 

 

쿼리 속도를 좀 빠르게 할수 있는 방법이 없을까요?

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

explain 해보면 index 구성 및 join에는 그리 큰 부하가 있는것으로 보이진 않습니다.
대신 group by 한 결과물을 order by 하는 과정에서 temp 테이블을 만들게 되고 해당 temp 테이블을 order by 하는 과정에서 부하가 생기는 것으로 생각됩니다...
쿼리 구문 중 ORDER BY count DESC LIMIT 1, 30 부분을 빼버리고 select 한 결과물을 받은 어플리케이션에서 정렬 알고리즘을 사용하여 정렬하는 방법은 어떨까 생각됩니다.

오아시셔(jjhoasis)님이 2009-05-12 17:30에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
28210급합니다 도와주세요. MySQL 구입 및 제품 상용화에 대해서 입니다. [7]
권우창
2009-05-14
10601
28209리눅스 mysql 마이그레이션 툴킷으로 윈도우에 마이그레이션 하면 데이터나 테이블이 안넘어옵니다.
유재훈
2009-05-12
6621
28208고수님 검증 부탁드립니다.
고수님하
2009-05-12
5898
28207쿼리 속도가 너무 느립니다. [1]
신토
2009-05-12
6432
28206DB가 자꾸 죽습니다...--; [1]
박서희
2009-05-12
5719
28205mysql 'wait_timeout' 에러 좀 봐주세여..ㅠㅠ [2]
김용진
2009-05-11
8070
28202내 글이 몇번째 글인지 알수 있나요?
경자
2009-05-11
5841
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다