我正在設計一個測驗和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