sql - 两次左连接一次查询MySQL性能问题

标签 sql mysql performance query-optimization

我正在设计一个用于测验和测验结果的项目。所以我有两个表:quizz_result 和 quizz。测验在 ID 上有主键,quizz_result 有外键 QUIZZ_ID 来测验身份。

下面的查询旨在进行按日期排序的公开测验以及相关信息:如果当前用户 (683735) 参加了此测验并具有有效结果 (>0),以及到目前为止有多少人填写了此测验。

所以我用两个左连接做了这个简单的查询:

select     
  a.*,  
  COUNT(countt.QUIZZ_ID) SUMFILL
from 
  quizz a
  left join quizz_result countt
    on countt.QUIZZ_ID = a.ID 
group by 
   a.ID

并在这些列上添加了索引: 测验:

ID, (ID, DATE), PUBLIC, (PUBLIC, DATE)

关于 quizz_result:

ID, (QUIZZ_ID, USER_ID), QUIZZ_ID, USER_ID, (QUIZZ_ID, QUIZZ_RESULT_ID)

但是当我查询时,仍然需要大约一分钟。我的 QUIZZ_RESULTS 中只有 34k 行,QUIZZ 表中只有 120 行。

当我对此查询执行 EXPLAIN 时,我得到以下信息:

SELECT TYPE: simple, possible keys:  IDX_PUBLIC,DATE, rows: 34  extra: Using where; Using temporary; Using filesort
SELECT TYPE: simple, possible keys: IDX_QUIZZ_USER,IDX_QUIZZ_RES_RES_QUIZ,IDX_USERID,I..., rows: 1, extra: nothing here
SELECT TYPE: simple, possible keys: IDX_QUIZZ_USER,IDX_QUIZ_RES_RES_QUIZZ,ID_RESULT_ID, rows: 752, extra:  Using index

而且我不知道如何优化这个查询。我看到这个:

Using where; Using temporary; Using filesort

但我仍然不知道如何做得更好,或者也许最后一次选择的行数太高?第752章

如何优化该查询?

编辑:我已将查询更新为只有一个左连接,因为它具有相同的长执行时间。

编辑2:我确实删除了所有内容,就是这样:这个带有一个查询的简单选择需要 1 秒才能执行。如何优化?

最佳答案

尝试从您的连接中删除一些附加条件。 将它们移至 where 子句有时会有所帮助。另外,考虑将核心连接放入它们自己的子查询中,然后使用 where 子句进行限制。

关于sql - 两次左连接一次查询MySQL性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591178/

相关文章:

matlab - Matlab 2019 中的 3 维 IRR

mysql - SQL语句连接三张表

mysql - 有人可以帮助解释为什么不使用 SQL JOIN 是错误的做法吗?

php - 从 MySQL : Undefined Index error PHP 中提取日期时间

python - bool 值的大列表和小列表以及字节数组的相对性能

performance - 谷歌云 SQL 很慢

mysql - SQL Doctrine 除夕

sql - 如何找到同时拥有猫和狗的用户?

mysql - 用于导出的 INTO OUTFILE 查询在本地驱动器上不起作用

MySql 子查询和 max 或 group by?