테이블 구조
<구독 테이블>
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초 이상 걸립니다..
쿼리 속도를 좀 빠르게 할수 있는 방법이 없을까요?
|