我正在设计一个测验和quizz结果项目。所以我有两张桌子:quizz_result和quizz。 quizz在ID上具有主键,quizz_result具有用于quizz标识的外键QUIZZ_ID。两个左连接和一个查询MySQL性能问题
下面的查询旨在按日期按照排序的信息排序进行公开测验:如果当前用户(683735)接受了这个quizz并且有一个有效结果(> 0),并且有多少人填充了这个quizz直到此时间点。
所以我做了两个没有这个简单的查询连接:
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
并添加索引这些列: QUIZZ:
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:我确实删除了所有的东西,并且它:这个简单的选择与一个查询需要1s执行。如何优化它?
尝试运行OPTIMIZE TABLE QUIZZ,quizz_result; – Greg 2009-10-19 21:17:13
@Greg谢谢你的提示。我做到了,但时间还是一样的 – 2009-10-19 21:31:59