mySQL查询优化LEFT JOIN

时间:2011-03-02 10:38:16

标签: mysql left-join

我需要从问题表中获取一些数据,然后LEFT JOIN产品答案。我需要特定类别中的所有问题列表(大约200个类别中的16个类别),然后在特定产品ID的问题旁边列出产品答案。

SELECT `questions`.`id`, `questions`.`text`, `questions`.`catalogue_id`, `productanswers`.`answer` 

FROM `questions` 

LEFT JOIN `productanswers` ON `productanswers`.`question_id` = `questions`.`id` 

AND product_id = '2001682' 

WHERE `catalogue_id` IN (1234912,1234913,1234914) 

ORDER BY `catalogue_id`

返回,因为我预期大约17个结果。没有这个产品答案的问题充满了Null,太棒了!

问题是查询大约需要23秒才能执行:-o无法完成所有目录问题的完整查询。

如何优化查询,或者您有其他想法吗?

谢谢, 塔夫

2 个答案:

答案 0 :(得分:3)

question_idproduct_id上添加复合(多列)索引:

ALTER TABLE productanswers ADD KEY(question_id, product_id)

注意:您可能希望在索引中切换列顺序,具体取决于question_idproduct_id的选择性

有关复合索引的更多信息,请参阅Docs

答案 1 :(得分:0)

此外,您应该在所有id列上都有索引,但我想你有这个。另一个信息来源是解释声明:http://dev.mysql.com/doc/refman/5.0/en/using-explain.html