我需要从问题表中获取一些数据,然后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无法完成所有目录问题的完整查询。
如何优化查询,或者您有其他想法吗?
谢谢, 塔夫
答案 0 :(得分:3)
在question_id
和product_id
上添加复合(多列)索引:
ALTER TABLE productanswers ADD KEY(question_id, product_id)
注意:您可能希望在索引中切换列顺序,具体取决于question_id
与product_id
的选择性
有关复合索引的更多信息,请参阅Docs
答案 1 :(得分:0)
此外,您应该在所有id列上都有索引,但我想你有这个。另一个信息来源是解释声明:http://dev.mysql.com/doc/refman/5.0/en/using-explain.html