2010-12-09 3 views
5

Я пытаюсь получить подсчет опросов, которые необходимо принять, которые хранятся в seotc, а количество завершенных обследований хранится seotcresults_v2. Таблица seotc содержит почти 100 тыс. Записей, а таблица seotcresults_v2 занимает примерно половину этого. Как я могу ускорить этот запрос?Ускорьте это заявление MySQL

SELECT 
    DISTINCT seotcresults_v2.Clock, 
    COUNT(seotc.Id) AS Surveys, 
    COUNT(seotcresults_v2.Id) AS Complete 
FROM seotc 
JOIN seotcresults_v2 ON seotcresults_v2.Clock = seotc.Clock 
WHERE seotcresults_v2.CampusID = 40 
AND seotcresults_v2.Term = 201011 
ORDER BY seotc.Clock 

UPDATE:

Спасибо за все ответы. Структура таблицы (минимально) такова:

seotc: | Id | Часы | CampusID | Срок |

seotcresults_v2: | Id | Часы | CampusID | Срок | Q1 | Q2 | ... и т.д.

Id является автоинкрементным индекса в каждой таблице для обследований и результатов обследования

Где Clock 'является идентификатором для инструктора и можно найти несколько раз в таблице seotc и seotcresults_v2 потому что они имеют несколько классов и несколько опросов, выполненных для каждого класса на несколько терминов. Я по существу пытаюсь определить скорость ответа, основанную на количестве опросов для преподавателя в данном кампусе в данном термине, по сравнению с количеством результатов, опубликованных с учетом тех же параметров. Это помогает?

Я также попытаюсь запустить EXPLAIN также в ближайшее время.

+1

Возможно, вы захотите добавить структуру таблицы к своему вопросу. – 2010-12-09 15:58:05

+0

Какие индексы вы определили в этих таблицах? – 2010-12-09 15:58:22

ответ

4

Первыми, что нужно проверить: индексируются столбцы WHERE-clause?

Затем: вам нужен ORDER BY, который является своего рода и дорогим.

И, наконец, столбцы .clock проиндексированы?

0

Я не думаю, что этот запрос даже даст вам правильные результаты.

Добавить индекс для campusID и Term, и, возможно, часы. Затем попробуйте этот запрос:

SELECT seotcresults_v2.Clock, 
     COUNT(seotc.Id) AS Surveys, 
     COUNT(seotcresults_v2.Id) AS Complete 
FROM seotc 
JOIN seotcresults_v2 ON seotcresults_v2.Clock = seotc.Clock 
WHERE seotcresults_v2.CampusID = 40 
AND seotcresults_v2.Term = 201011 
GROUP by seotcresults_v2.Clock 
ORDER BY seotcresults_v2.Clock 
Смежные вопросы