2015-03-31 184 views
-1

我有一个像下面这样的查询,请帮忙给出适当的索引,联系人表有超过20K的记录,并且需要将近20秒才能加载。 希望通过group by子句提出问题,如果我删除group by子句总记录超过300k。MYSQL GROUP BY - 缓慢查询

SELECT `a`.*, CONCAT(a.`firstname`, " ", a.`lastname`) AS `cont_name`, CONCAT(a.`position`, "/", a.`company`) AS `comp_pos`, `e`.`name` AS `industry_name`, CONCAT(f.`firstname`, " ", f.`lastname`) AS `created_by` 
FROM `contacts` AS `a` 
LEFT JOIN `user_centres` AS `b` ON a.user_id = b.user_id 
LEFT JOIN `group_contacts` AS `c` ON a.id = c.contact_id 
LEFT JOIN `groups` AS `d` ON c.group_id = d.id 
LEFT JOIN `industries` AS `e` ON e.id = a.industry_id 
LEFT JOIN `users` AS `f` ON f.id = a.user_id 
WHERE (1) 
GROUP BY `a`.`id` 
ORDER BY `a`.`created` desc 

解释显示像这样 - 20145使用临时;使用文件排序

+0

删除'组by'。你没有聚合功能,所以看起来没有必要。 – 2015-03-31 12:19:33

+0

你可以发布完整的解释和表格布局吗? LEFT OUTER JOINs是必需的,还是只能使用INNER JOIN? – Kickstart 2015-03-31 12:22:37

+1

LEFT JOIN'group_contacts' as'c' ON a.id = c.contact_id LEFT JOIN' groups'由于'd' ON c.group_id = d.id是不必要的连接...删除它 – Javaluca 2015-03-31 12:25:46

回答

0

您可以尝试以下步骤

  1. 是没有用的表组(d)的,这样可以去除左加入到组从此查询
  2. 添加索引user_idcontact_idindustry_id (我希望这些ID加入表primary_keys)在联系人表
  3. 检查这些ID user_id,contact_idindustry_id类型(INT)是相同的。
0

我们的要求是如下

1)在管理员登录的所有联系人的列表

接触表

总记录中的经理/业务员登录的联系人

2)中心明智列表> 20K。

user_centres表中的用户将有多个条目,即:用户被分配到多个中心。

通过排除GROUP BY来执行服务器查询时,接近30万个数据导致了问题。

我已经详细检查了问题并简化了查询,如下所示,此处与user_centres表的连接用于数据的中心明智过滤。

SELECT `a`.*, CONCAT(a.`firstname`, " ", a.`lastname`) AS `cont_name`, 
CONCAT(a.`position`, "/", a.`company`) AS `comp_pos`, `e`.`name` AS `industry_name`, 
CONCAT(f.`firstname`, " ", f.`lastname`) AS `created_by` FROM `contacts` AS `a` 
LEFT JOIN `users` AS `f` ON f.id = a.user_id 
LEFT JOIN `user_centres` AS `b` ON a.user_id = b.user_id 
LEFT JOIN `industries` AS `e` ON e.id = a.industry_id 
WHERE (b.centre_id IN (23, 24, 25, 26, 20, 21, 22, 27, 28)) 
GROUP BY `a`.`id` ORDER BY `a`.`created` desc 

EXPLAIN给出结果为: - 1个SIMPLE一个索引PRIMARY,USER_ID,AREA_ID,industry_id,国家PRIMARY 4 NULL 20145使用临时;使用文件排序

请到更多的帮助

联系表屏幕 - http://prntscr.com/6o5gw4

user_centres表 - http://prntscr.com/6o5h30

+0

EXPLAIN结果 - http://prntscr.com/6o5h8s – 2015-04-01 14:38:01