使用LEFT JOIN的MySQL查询挂起

时间:2015-01-16 16:08:31

标签: mysql

有人可以告诉我可能出错的地方以下查询导致我的网页挂起:

SELECT m.member_id, m.member_name, SUM(CONCAT(f.pounds, '.', f.pence)) AS totalfigure
FROM members m
LEFT JOIN figures f ON f.member_id = m.member_id AND f.period_id = 45
WHERE m.added BETWEEN '1980-01-01' AND '2014-10-31'
AND (DATE_SUB('2014-08-01', INTERVAL 60 DAY)) < m.removed
GROUP BY m.member_id
ORDER BY m.member_name;

如果我使用JOIN而不是LEFT JOIN,同样的查询运行正常,但我还需要查看数字表中没有条目的成员。

这是LEFT JOIN获得的EXPLAIN结果:

id   select_type   table   type   possible_keys   key   key_len   ref   rows   Extra
 1   SIMPLE        m       ALL    NULL            NULL  NULL      NULL  3128   Using temporary; Using filesort
 1   SIMPLE        f       ALL    NULL            NULL  NULL      NULL  169214

和JOIN结果是:

id   select_type   table   type   possible_keys   key     key_len   ref             rows    Extra
 1   SIMPLE        f       ALL    NULL            NULL    NULL      NULL            169214  Using where; Using temporary; Using filesort
 1   SIMPLE        m       eq_ref PRIMARY         PRIMARY 3         db.f.member_id  1

每个表的结构是:

CREATE TABLE IF NOT EXISTS `members` (
`member_id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`member_name` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`member_id`),
FULLTEXT KEY `member_name` (`member_name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3462 ;

CREATE TABLE IF NOT EXISTS `figures` (
`supplier_id` int(10) unsigned NOT NULL DEFAULT '0',
`contract_id` mediumint(5) unsigned NOT NULL DEFAULT '1',
`member_id` mediumint(5) unsigned NOT NULL,
`period_id` mediumint(5) unsigned NOT NULL DEFAULT '0',
`pounds` varchar(8) DEFAULT NULL,
`pence` char(3) DEFAULT '00',
PRIMARY KEY (`supplier_id`,`member_id`,`period_id`,`contract_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

由于

0 个答案:

没有答案