sql - 如何优化这个 SQL 查询

标签 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 

最佳答案

重写它以使用 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

关于sql - 如何优化这个 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5028964/

相关文章:

php - sphinx 全文搜索与列过滤

PHP/MySQL - 在表中选择每种类型之一

performance - 除了渲染向量之外,AS3 中的主要性能影响因素是什么?

php - Postgres - 从数组中选择元素

sql - 了解 SQL 中的 NOT EXISTS

mysql - 如何使用 where 子句进行 UPSERT

php - 一个用户名适用于所有数据库还是多个 MySQL 帐户?

php - 从 mysql 数据库中检索为 blob 图像时图像损坏

php - 在 PHP 中包含文件时,注释会影响吗?

c++ - 计算机视觉算法的 CUDA 性能