2015-05-29 25 views
0

有人可以帮助我进行Mysql查询优化吗?针对临时表的Mysql查询优化

查询:

SELECT 
lm.lead_id,lm.lead_title,lm.lead_active,lm.lead_da te, 
la.lead_assign_add_date 
FROM 
lms_lead_master lm 
LEFT JOIN lms_lead_assign la ON lm.lead_id = la.lead_id 
WHERE 
lm.lead_active = '1' 
GROUP BY 
lm.lead_id 
ORDER BY 
la.lead_assign_add_date desc 

解释节目

流明表使用使用其中;使用临时;在Extra中使用filesort。

Index : lm -> PRIMARY KEY (`lead_id`), 
KEY `fk_lms_status_id` (`lead_status_id`), 
KEY `fk_lms_source_id` (`lead_source_id`), 
KEY `fk_lms_user_id` (`user_id`), 
KEY `opt_master` (`lead_active`,`lead_date`) 
la ->PRIMARY KEY (`lead_assign_id`), 
KEY `fk_lms_assignee` (`lead_assignee_id`), 
KEY `fk_lms_assigned` (`lead_assigned_to_id`), 
KEY `fk_lms_user` (`user_id`), 
KEY `fk_lms_lead_id` (`lead_id`), 
KEY `lead_assign_date` (`lead_assign_add_date`) 

如何避免临时表和文件排序?

在此先感谢。南非智利。

回答

0

如果你在这里的文件http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html仔细看,你会发现你的答案

如果有一个ORDER BY子句和不同的GROUP BY子句,或者如果 的ORDER BY或GROUP BY包含除了连接队列中第一个表的 以外的表中的列,将创建一个临时表。

和您的查询做了同样的

  • ORDER BY子句和不同的GROUP BY子句。

  • ORDER BY或GROUP BY包含在加入队列

比所述第一表中的其他表中的列