如何优化此SQL查询

时间:2011-02-17 12:33:58

标签: sql mysql performance

在大型实例(即非常强大的)上运行MySQL 5(Amazon RDS),此查询需要16秒才能执行。这个InnoDB表有大约200万行。

DELETE FROM quiz_multichoice_user_answer_multi WHERE
user_answer_id IN( SELECT id FROM
quiz_multichoice_user_answers WHERE question_nid =
1001700 AND question_vid = 1002731 AND result_id =
64003 

3 个答案:

答案 0 :(得分:1)

您的列是否已编入索引? 你期望这会影响多少行?如果它只有一个,那么尝试在最后添加LIMIT 1,这样它就不会在删除第一行后查找其他行

也可以尝试使用EXPLAIN:http://dev.mysql.com/doc/refman/5.0/en/explain.html

答案 1 :(得分:1)

重写它以使用JOIN而不是子查询,看看是否可以改进。它通常与MySQL有关;查询规划器更好地优化连接,并在使用时选择好的索引,无论出于何种原因。

DELETE 
  quiz_multichoice_user_answer_multi
FROM
  quiz_multichoice_user_answer_multi
INNER JOIN
  quiz_multichoice_user_answers
ON
  quiz_multichoice_user_answer_multi.user_answer_id = quiz_multichoice_user_answers.id
WHERE
  quiz_multichoice_user_answers.question_nid = 1001700
AND
  quiz_multichoice_user_answers.question_vid = 1002731
AND
  quiz_multichoice_user_answers.result_id = 64003

答案 2 :(得分:0)

我不确定如何优化查询,因为它现在非常简单,您只需选择所需的数据等。

也许更好的方法是考虑优化数据库结构?