我需要从一个问题表中获取一些数据,然后离开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个结果。这个产品没有答案的问题都是空的,太棒了!
问题是查询大约需要23秒才能执行:-o这使得包含所有目录问题的完整查询变得不可能。
我如何优化查询,或者您有其他想法吗?
谢谢,Taff
发布于 2011-03-02 18:42:23
在question_id和product_id上一起添加复合(多列)索引:
ALTER TABLE productanswers ADD KEY(question_id, product_id)注意:根据question_id与product_id的选择性,您可能希望切换索引中的列顺序
有关复合索引的更多信息,请参见Docs
发布于 2011-03-02 18:46:18
此外,您应该在所有的id列上都有索引,但我猜您有这个。另一个信息来源是explain语句:http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
https://stackoverflow.com/questions/5166247
复制相似问题