在大型实例(即非常强大的)上运行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
答案 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)
我不确定如何优化查询,因为它现在非常简单,您只需选择所需的数据等。
也许更好的方法是考虑优化数据库结构?